Странная ситуация с поиском '[' в столбцах varchar в SQL Server 2000 - PullRequest
1 голос
/ 17 сентября 2011

У меня есть таблица в Sql Server 2000 с именем Table1 с несколькими столбцами, один из столбцов - varchar(255), называется 'Col5'.

Содержимое, если одна из строк в этом столбцеis [test].

Когда я пытаюсь проверить часть этой строки с помощью оператора LIKE, я никак не могу найти [.

Вот чтоЯ получаю:

1 - пытается SELECT * FROM Table1 WHERE Col1 LIKE '%[%' возвращает NO результаты.

2 - пытается SELECT * FROM Table1 WHERE Col1 LIKE '%[t%' возвращает NO результаты.

3 - попытка SELECT * FROM Table1 WHERE Col1 LIKE '%t]%' возвращает 1 результат, который, как и ожидалось.

4 - попытка SELECT * FROM Table1 WHERE Col1 LIKE '%test%' возвращает 1 результат, как и ожидалось.

Это странное поведение,ошибка, что происходит, какие-нибудь идеи?

1 Ответ

2 голосов
/ 17 сентября 2011

Этот символ имеет особое значение в синтаксисе шаблона и должен быть экранирован либо путем определения явного escape-символа

where Col1 like '%/[%' ESCAPE '/'

или используя несколько квадратных скобок

where Col1 like  '%[[]%'

Помимо своей роли в экранировании символов, он используется в синтаксисе при определении диапазонов или наборов символов для сопоставления. например LIKE '[0-9]%' для поиска всех значений, начинающихся с цифры.

Когда диапазон или набор не закрываются с помощью ], создается впечатление, что SQL Server просто добавляет один конец. Таким образом, c like '%[%' обрабатывается как c like '%[%]' и находит все значения, содержащие символ %.

...