Как сравнить символы Юникода в SQL-сервере? - PullRequest
1 голос
/ 01 декабря 2010

Здравствуйте, я пытаюсь найти все строки в моей базе данных (SQL Server), которые имеют символ é в своем тексте, выполнив следующие запросы.

SELECT COUNT(*) FROM t_question WHERE patindex(N'%[\xE9]%',question) > 0;

SELECT COUNT(*) FROM t_question WHERE patindex(N'%[\u00E9]%',question) > 0;

Но я нашел двепроблемы: (а) они возвращают различное количество строк и (б) они возвращают строки, которые не имеют указанного символа.

Является ли способ построения регулярного выражения и сравнения Юникода правильным?

РЕДАКТИРОВАТЬ:

Столбец вопроса хранится с использованием типа данных nvarchar.Следующий запрос дает правильный результат.

SELECT COUNT(*) FROM t_question WHERE question LIKE N'%é%';

Ответы [ 2 ]

4 голосов
/ 01 декабря 2010

Почему бы не использовать SELECT COUNT(*) FROM t_question WHERE question LIKE N'%é%'?

NB: Like и patindex do not принимать регулярные выражения.

В синтаксисе шаблона SQL Server [\xE9] означает соответствует любому отдельному символу в указанном наборе .то есть совпадение \, x, E или 9.Таким образом, любая из следующих строк будет соответствовать этому шаблону.

  • «Слон»
  • «Ось»
  • «99,9»
0 голосов
/ 01 декабря 2010
...