SQL Server Уникнути підкреслення


338

Як уникнути символу підкреслення?

Я пишу щось на зразок наступного, де ставиться застереження і хочу, щоб можна було знайти фактичні записи з _d в кінці.

Where Username Like '%_d'

Відповіді:


523

Довідка T-SQL для LIKE :

Ви можете використовувати символи підстановки, що відповідають символам, як буквальні символи. Щоб використовувати символ підстановки як буквальний символ, укладіть символ підстановки в дужки. У наступній таблиці показано кілька прикладів використання ключового слова LIKE та символів [].

Для вашого випадку:

... LIKE '%[_]d'

о людино! ... якщо вона все ще не працює, переконайтеся, що ви маєте правильний стовпець.
Єнс Франдсен

198

Очевидно, що рішення @Lasse правильне, але є інший спосіб вирішити вашу проблему: T-SQL-оператор LIKEвизначає необов'язковий пункт ESCAPE , який дозволяє вам оголосити символ, який уникне наступного символу в шаблон.

Для вашого випадку такі пункти WHERE рівноцінні:

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

43
Для завершення картини: ESCAPEпункт є частиною стандарту SQL і буде працювати в будь-якій СУБД, а не тільки в 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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.