ใช้แทนที่ใน SQL


13

ฉันมีตารางและฉันจำเป็นต้องอัปเดตชื่อบางส่วน แต่ฉันสงสัยเกี่ยวกับ

แบบสอบถามต่อไปนี้:

ทั้งสองจะทำเหมือนกันหรือไม่

Query1

Update mytable
Set Name = Replace(Name,'Jeff','Joe')

Query2

Update mytable
Set Name = 'Joe'
where Name = 'Jeff'

คำตอบ:


11

ไม่มันไม่เหมือนกัน

แบบสอบถามแรกค้นหาสตริงภายในสตริงทั้งหมด (ดูreplace () " แทนที่ค่าสตริงที่ระบุทั้งหมดด้วยค่าสตริงอื่น ") รายการที่สองค้นหาสตริงที่แน่นอน

หากคุณมีบันทึกเช่นJeffJoeแบบสอบถามแรกจะให้JoeJoeแบบสอบถามที่สองจะให้JeffJoe(ไม่มีการดัดแปลงใด ๆ )


25

ไม่พวกเขาจะไม่ทำสิ่งเดียวกัน

  1. จำนวนของความพยายามที่ต้องการโดยเอ็นจิน SQL นั้นแตกต่างอย่างสิ้นเชิง ในแบบสอบถามแรกเครื่องยนต์จะต้องผ่านทุกแถวและดำเนินการแทนที่สตริงในคอลัมน์ชื่อ ในเคียวรีที่สองเป็นการค้นหาในตารางที่ชื่อคือ "Jeff" และเพิ่งอัพเดตคอลัมน์ชื่อเป็น Joe

  2. การแทนที่สตริงคืออักขระตัวแทน ดังนั้นในการสืบค้นแรกชื่อ "Jeffrey" จะกลายเป็น "Joerey"


3
ดูเหมือนว่าจุดที่ 2 สำคัญกว่า ถ้ามันไม่ได้ทำสิ่งที่ถูกต้องประสิทธิภาพจะไม่เกี่ยวข้อง
Martin Smith

คุณอาจถูกต้อง แต่จริง ๆ แล้วเราไม่ทราบว่าวัตถุประสงค์ทางธุรกิจของการอัปเดตควรเป็นอย่างไร ฉันควรจะกลับคำสั่งของการวิเคราะห์ แต่ฉันคิดว่าการกล่าวถึงข้อบกพร่องทั้งสองเป็นสิ่งที่ถูกต้องที่จะทำ ความคิดหนึ่งที่นึกถึงคือ OP ทำให้มันง่ายขึ้นสำหรับเรา แต่ไม่ได้ให้รายละเอียดเช่น "ชื่อ" มีชื่อเต็มจริง ๆ ไม่ใช่แค่ชื่อจริง
Jonathan Fite
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.