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

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

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

Where Username Like '%_d'

Ответов (7)

Решение

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

Эти решения абсолютно логичны. К сожалению, ни то, ни другое не помогло мне, как ожидалось. Вместо того, чтобы пытаться возиться с этим, я решил обойтись:

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

нравиться '%[\_]%'

Добавить [] сделал работу за меня

У меня была аналогичная проблема с использованием подобного шаблона '%_%', который не работал - как указывает вопрос :-)

Использование '%\_%' также не сработало, поскольку это первое \ интерпретируется «до подобного».

Использование '%\\_%' работает. \\ (Двойной обратный слэш) сначала преобразуется в одной \ (обратной косой черты) , а затем использовали в как шаблон.