ฉันจะหลีกเลี่ยงอักขระขีดล่างได้อย่างไร
ฉันกำลังเขียนสิ่งต่อไปนี้ซึ่งเป็นส่วนคำสั่งและต้องการหารายการจริงด้วย _d ในตอนท้าย
Where Username Like '%_d'
ฉันจะหลีกเลี่ยงอักขระขีดล่างได้อย่างไร
ฉันกำลังเขียนสิ่งต่อไปนี้ซึ่งเป็นส่วนคำสั่งและต้องการหารายการจริงด้วย _d ในตอนท้าย
Where Username Like '%_d'
คำตอบ:
การอ้างอิง T-SQL สำหรับ LIKE :
คุณสามารถใช้อักขระการจับคู่รูปแบบสัญลักษณ์แทนเป็นตัวอักษร หากต้องการใช้อักขระไวด์การ์ดเป็นตัวอักษรให้ใส่อักขระไวด์การ์ดในวงเล็บ ตารางต่อไปนี้แสดงตัวอย่างการใช้คำสำคัญ LIKE และอักขระตัวแทน []
สำหรับกรณีของคุณ:
... LIKE '%[_]d'
เห็นได้ชัดว่าวิธีการแก้ปัญหา @Lasse ถูกต้อง แต่มีวิธีอื่นในการแก้ปัญหาของคุณ: ตัวดำเนินการ T-SQL LIKE
กำหนดส่วนคำสั่งESCAPE ที่เป็นทางเลือกซึ่งช่วยให้คุณประกาศอักขระซึ่งจะหนีอักขระถัดไปในรูปแบบ
สำหรับกรณีของคุณคำสั่ง WHERE ต่อไปนี้เทียบเท่า:
WHERE username LIKE '%[_]d'; -- @Lasse solution
WHERE username LIKE '%$_d' ESCAPE '$';
WHERE username LIKE '%^_d' ESCAPE '^';
ESCAPE
clause เป็นส่วนหนึ่งของมาตรฐาน SQL และจะทำงานกับ DBMS ใด ๆ ไม่ใช่เฉพาะ SQL Server
โซลูชั่นเหล่านี้เข้ากันได้อย่างสมบูรณ์ น่าเสียดายที่ไม่ได้ทำงานให้ฉันตามที่คาดไว้ แทนที่จะพยายามรบกวนมันฉันไปทำงานกับ:
select * from information_schema.columns
where replace(table_name,'_','!') not like '%!%'
order by table_name
สิ่งนี้ใช้ได้สำหรับฉันเพียงใช้การหลบหนี
'%\_%'
สิ่งเหล่านี้ไม่เหมาะกับฉันใน SSIS v18.0 ดังนั้นฉันจะทำสิ่งนี้:
WHERE CHARINDEX('_', thingyoursearching) < 1
.. ทุกที่ที่ฉันพยายามเพิกเฉยต่อข้อความที่มีขีดเส้นใต้ หากคุณต้องการค้นหาสิ่งที่มีขีดเส้นใต้เพียงแค่พลิกมันไปรอบ ๆ :
WHERE CHARINDEX('_', thingyoursearching) > 0