Странное поведение sql сервера - PullRequest
0 голосов
/ 16 апреля 2009

У меня есть следующая структура таблицы в моей БД

ID               Name
--------------------------
ID_1             Name1

ID1              Name2

при выполнении следующего запроса

SELECT * FROM tblNames
WHERE ID LIKE '_1'

Я выбрал обе записи ...

какие-либо предложения, как избавиться от него ??

Ответы [ 4 ]

5 голосов
/ 16 апреля 2009

Подчеркивание (_) - это специальный символ в выражениях LIKE, который соответствует одному символу.

Чтобы соответствовать действительному подчеркиванию, вам нужно его избежать:

select * from tblNames where id like '%\_1' escape '\'

Здесь я говорю SQL Server о необходимости рассматривать обратную косую черту как escape-символ и использовать его для экранирования подчеркивания.

В качестве альтернативы, вы можете представить подчеркивание как диапазон символов с одним символом в нем - это будет интерпретироваться буквально в этом случае:

select * from tblNames where id like '%[_]1'

Что более кратко.

Ссылка: MSDN .

2 голосов
/ 16 апреля 2009

НРАВИТСЯ оператор

Quickie: _ - это символ подстановки, который соответствует чему-либо.

SELECT * FROM tblNames
WHERE ID LIKE '\_1' ESCAPE '\'
0 голосов
/ 16 апреля 2009

Символ подчеркивания является подстановочным знаком для оператора like и соответствует любому одному символу. В вашем случае шаблон '_1' соответствует как '_1', так и 'D1' в данных.

Чтобы использовать буквенный символ подчеркивания в шаблоне, необходимо заключить его в квадратные скобки, чтобы он стал диапазоном символов, содержащим только один символ:

SELECT * FROM tblNames
WHERE ID LIKE '[_]1'
0 голосов
/ 16 апреля 2009
SELECT * FROM tblNames
WHERE ID LIKE '[_]1'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...