MS SQL 2005 поле сравнения, содержащее квадратные скобки - PullRequest
1 голос
/ 02 февраля 2009

Я использую MS SQL Server 2005 (9.0.4035) и пытаюсь найти строки, содержащие одинаковые данные, в поле nvarchar (4000). Поле содержит xml с квадратными скобками, открывающими и закрывающими.

Вот пример данных:
DataID Data
1 1
2 1
3 2]
4 2]
5 3 [
6 3 [

Используя оператор like, я ожидал получить 3 совпадающие пары, но моя проблема в том, что строки 5 и 6 не совпадают друг с другом, я только получаю обратно, что строки 1 и 2 совпадают, а 3 и 4 совпадают.

Я знаю, что в MS SQL 2005 добавлена ​​поддержка регулярных выражений в запросах, но я не ожидал, что они будут оценивать полевые данные как регулярные выражения, что, по-моему, и делает. Есть ли режим, который мне нужно включить, чтобы получить правильные результаты?

Любая помощь приветствуется,
Райан

Редактировать: Добавлен SQL-оператор:

Выберите t1.DataID, t2.DataID из TestTable t1, TestTable t2
Где t1.DataID <> t2.DataID
и t1.Data, как t2.Data

Редактировать: Ответ
Использование оператора «=» работает, но экранирование «[» - нет.

1 Ответ

3 голосов
/ 02 февраля 2009

Измените свой запрос на использование = вместо LIKE, и вы получите ожидаемые результаты. SQL 2005 T-SQL не будет выполнять регулярное выражение - для этого вам нужно было бы использовать функции CLR, но в сопоставлении LIKE выполняется сопоставление с образцом. '[' и ']' зарезервированы для сопоставления с образцом в подобном утверждении, и вам придется их избегать, если вы хотите, чтобы они были равными.

См. http://msdn.microsoft.com/en-us/library/ms179859.aspx для получения информации об операторе LIKE.

Любой из 2 приведенных ниже запросов решил проблему в моих тестах ...

--using equals operator...
Select t1.DataID, t2.DataID From TestTable t1, TestTable t2
Where t1.DataID <> t2.DataID
and t1.Data = t2.Data

--using replace to add an escape character.
Select t1.DataID, t2.DataID From TestTable t1, TestTable t2
Where t1.DataID <> t2.DataID
and t1.Data like REPLACE(t2.Data, '[', '\[') escape '\'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...