SQL Server ขีดเส้นใต้


338

ฉันจะหลีกเลี่ยงอักขระขีดล่างได้อย่างไร

ฉันกำลังเขียนสิ่งต่อไปนี้ซึ่งเป็นส่วนคำสั่งและต้องการหารายการจริงด้วย _d ในตอนท้าย

Where Username Like '%_d'

คำตอบ:


523

การอ้างอิง T-SQL สำหรับ LIKE :

คุณสามารถใช้อักขระการจับคู่รูปแบบสัญลักษณ์แทนเป็นตัวอักษร หากต้องการใช้อักขระไวด์การ์ดเป็นตัวอักษรให้ใส่อักขระไวด์การ์ดในวงเล็บ ตารางต่อไปนี้แสดงตัวอย่างการใช้คำสำคัญ LIKE และอักขระตัวแทน []

สำหรับกรณีของคุณ:

... LIKE '%[_]d'

โอ้มนุษย์! ... หากยังใช้งานไม่ได้ตรวจสอบให้แน่ใจว่าคุณมีคอลัมน์ที่ถูกต้อง
Jens Frandsen

198

เห็นได้ชัดว่าวิธีการแก้ปัญหา @Lasse ถูกต้อง แต่มีวิธีอื่นในการแก้ปัญหาของคุณ: ตัวดำเนินการ T-SQL LIKEกำหนดส่วนคำสั่งESCAPE ที่เป็นทางเลือกซึ่งช่วยให้คุณประกาศอักขระซึ่งจะหนีอักขระถัดไปในรูปแบบ

สำหรับกรณีของคุณคำสั่ง WHERE ต่อไปนี้เทียบเท่า:

WHERE username LIKE '%[_]d';            -- @Lasse solution
WHERE username LIKE '%$_d' ESCAPE '$';
WHERE username LIKE '%^_d' ESCAPE '^';

43
เพื่อให้รูปภาพสมบูรณ์: ESCAPEclause เป็นส่วนหนึ่งของมาตรฐาน SQL และจะทำงานกับ DBMS ใด ๆ ไม่ใช่เฉพาะ SQL Server
a_horse_with_no_name

2

โซลูชั่นเหล่านี้เข้ากันได้อย่างสมบูรณ์ น่าเสียดายที่ไม่ได้ทำงานให้ฉันตามที่คาดไว้ แทนที่จะพยายามรบกวนมันฉันไปทำงานกับ:

select * from information_schema.columns 
where replace(table_name,'_','!') not like '%!%'
order by table_name


0

สิ่งเหล่านี้ไม่เหมาะกับฉันใน SSIS v18.0 ดังนั้นฉันจะทำสิ่งนี้:

WHERE CHARINDEX('_', thingyoursearching) < 1

.. ทุกที่ที่ฉันพยายามเพิกเฉยต่อข้อความที่มีขีดเส้นใต้ หากคุณต้องการค้นหาสิ่งที่มีขีดเส้นใต้เพียงแค่พลิกมันไปรอบ ๆ :

WHERE CHARINDEX('_', thingyoursearching) > 0

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.