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

339

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

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

Where Username Like '%_d'
GateKiller
источник

Ответы:

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
Тек Мейлер
источник
2

Это сработало для меня, просто используйте побег '%\_%'

Арнор Баркарсон
источник
0

Ничто из этого не работало для меня в SSIS v18.0, поэтому я хотел бы сделать что-то вроде этого: ...

WHERE CHARINDEX('_', thingyoursearching) < 1

где я пытаюсь игнорировать строки с подчеркиванием в них. Если вы хотите найти вещи с подчеркиванием, просто переверните их:

WHERE CHARINDEX('_', thingyoursearching) > 0

wolverine87
источник