2009-04-16 2 views
0

Я имею следующую структуру таблицы в моей БДСтранное поведение SQL сервера

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

ID1    Name2 

, когда я исполняю следующий запрос

SELECT * FROM tblNames 
WHERE ID LIKE '_1' 

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

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

ответ

5

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

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

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

Здесь я говорю SQL Server, чтобы рассмотреть обратную косую черту экранирующего символа, и использовать его, чтобы избежать подчеркивания.

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

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

который немного более емким.

Код: MSDN.

2

LIKE operator

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

SELECT * FROM tblNames 
WHERE ID LIKE '\_1' ESCAPE '\' 
0

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

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

SELECT * FROM tblNames 
WHERE ID LIKE '[_]1' 
Смежные вопросы