ค้นหาแถวด้วยอักขระพิเศษใน SQL Server
ในขณะที่การแก้ไขปัญหาการเขียนโปรแกรมวันนี้ฉันสังเกตเห็นว่าคุณไม่สามารถใช้การค้นหา LIKE สำหรับคอลัมน์สตริงที่มีอักขระพิเศษเช่น% หรือ _ โดยไม่ต้องใช้ไวยากรณ์พิเศษ การค้นหาปัญหาใช้เวลาเพียงไม่กี่นาที แต่การจดจำไวยากรณ์นั้นง่ายกว่าเสมอหากคุณเขียนถึงมัน.
ใช่แล้วโพสต์นี้มีไว้เพื่อประโยชน์ของฉันเท่านั้น หวังว่ามันจะช่วยคนอื่นด้วย.
สมมติว่าคุณต้องการค้นหาเขตข้อมูลใด ๆ ที่มีข้อความ“ 100%” ดังนั้นคุณจึงรวบรวมแบบสอบถามนี้:
SELECT * FROM tablename WHERE fieldname เช่น '% 100 %%'
แทนที่จะเป็นสิ่งที่คุณต้องการคุณจะได้แถวทั้งหมดที่มี“ 100” และแถวที่มี“ 100%”.
ปัญหาที่นี่คือ SQL Server ใช้เครื่องหมายเปอร์เซ็นต์ขีดล่างและวงเล็บเหลี่ยมเป็นอักขระพิเศษ คุณไม่สามารถใช้มันเป็นตัวอักษรธรรมดาในการสืบค้นแบบ LIKE ได้โดยไม่ต้องหลบหนี.
Square Bracket Escape
คุณสามารถล้อมรอบ% หรือ _ ด้วยเครื่องหมายวงเล็บเหลี่ยมเพื่อบอก SQL Server ว่าอักขระภายในเป็นอักขระปกติ.
SELECT * FROM tablename WHERE fieldname เช่น '% 100 [%]%'
T-SQL ESCAPE ไวยากรณ์
หรือคุณสามารถผนวกโอเปอเรเตอร์ของ ESCAPE ลงในคิวรีของคุณและเพิ่ม \ อักขระก่อนที่ค่าที่คุณต้องการจะหนี.
SELECT * จากแท็บแท็บ WHERE ชื่อเขตข้อมูลเช่น '% 100 \ %%' ESCAPE '\'
ส่วนของการสอบถาม ESCAPE '\' จะบอกให้เอนจิน SQL ทำการแปลอักขระหลังจาก \ เป็นตัวอักษรแทนที่จะเป็นไวด์การ์ด.
โดยส่วนตัวแล้วฉันพบว่าวิธีที่สองง่ายต่อการจัดการและคุณสามารถใช้วิธีนี้เพื่อหลีกเลี่ยงวงเล็บเหลี่ยมได้เช่นกัน.