Как мне избежать подчеркивания?
Я пишу что-то вроде следующего предложения where и хочу найти реальные записи с _d в конце.
Where Username Like '%_d'
Как мне избежать подчеркивания?
Я пишу что-то вроде следующего предложения where и хочу найти реальные записи с _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
предложение является частью стандарта SQL и будет работать на любой СУБД, а не только на 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