2010-11-30 18 views
1

こんにちは私はデータベース内のすべての行(SQL Server)の文字éを次のクエリを実行してテキスト内に見つけようとしています。 (a)は、それらの両方が異なる数の行を返すされており、(b)は彼らが指定された文字を持たない行を返すされています SQLサーバーのUnicode文字を比較する方法は?

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

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

は、しかし、私は二つの問題を発見しました。

私は正規表現を構築して、Unicodeを正確に比較していますか?

EDIT:

質問欄は、データ型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

+0

@Ravi - 何らかの理由で文字列 'WHERE patindex(N '%' + NCHAR(0xE9)+ '%'、質問)> 0 'を使用したくない場合は、' WHERE patindex %é% '、question)> 0' –

+0

ありがとうございました。これは本当に助けになりました。私はPATINDEXが正規の正規表現をサポートしているという印象を受けました。 – rkg

関連する問題