2010-11-30 4 views
1

Привет Я пытаюсь найти все строки в моей базе данных (SQL Server), которые имеют в своем тексте символ é, выполнив следующие запросы.Как сравнить символы Unicode на SQL-сервере?

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'%é%'; 

ответ

4

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

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

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

  • "слон"
  • "ось"
  • "99,9"
+0

Таким образом, первый из них соответствие с \, 0,0, E или 9? Есть ли способ указать Юникод в запросе? – rkg 2010-11-30 23:08:52

Смежные вопросы