SQL Server избежать подчеркивания


339

Как мне избежать подчеркивания?

Я пишу что-то вроде следующего предложения where и хочу найти реальные записи с _d в конце.

Where Username Like '%_d'

Ответы:


526

Справочник по 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.