2011-06-25 11 views
3

nvarchar(50)と宣言されたテーブルに2つのフィールドがあります。いくつかのレコードでは、フィールドには同じ値が表示されます。 Howvever where句field1 <> field2,を使用してクエリを実行すると、フィールドが異なることがわかります。私はwhere句ltrim(rtrim(field1)) <> ltrim(rtrimfield2))を使ってみましたが、まだ違いがあります。私は困惑している!NVARCHARフィールドの比較SQL Server 2008 R2

ありがとうございます。

+0

あなたが 'SELECT '[' + yourColName + ']''を実行するとどうなりますか?たぶんあなたが最初に見ない特別な後続の特殊文字があります... –

+0

データを追加してください – gbn

答えて

2

これは、異なる言語の類似の文字を使用すると発生します。あなたは目でそれらを認識することはできませんが、異なっています...

例、これは英語とΕλληνικά(Ellas)のすべての文字ですが、いくつかは同じようですが、そうではありません。 < O

>ο
Y <>Υ
<>Α
E <>Ε

いくつかの他の有する小さいが顕著に異なる
U <>υ
P <>ρ
i <>

だからこの'単語'はこれと異なります。'word' 'o'に表示されますが、見えません。私はあなたが@Aristosが言うことに加えて、「いくつかの記録に

1

を言うので、それはまた改行なしスペース(U + 00A0)のような文字可能性があり、この問題を考えたり

PS 幅ゼロのスペース(U + 200B)は、LTRIM/RTRIMでトリミングされません。

+0

どうすればこの問題を修正できますか? – hoestang406

+0

@ hoestang406:それはやっと*質問*のように聞こえます。 :)まず、実際にどのような問題が発生しているのかを判断する必要があります。基本的には、 'SELECT DISTINCT nvarcharExpr、CAST(var varchar)、FROM ...'のように、 'nvarcharExpr'は' UPPER(LTRIM(RTRIM(nvarcharColumn))) 'のようなものを使用します。そうすれば、私は「同じ」価値の間にどのような違いがあるかを知ることができます。次に、 'REPLACE()'関数を使用して、見えない文字を削除したり、正しい文字で置き換えたりします。 –

0

同じ問題が発生しています。

Myテーブルには、DefinitionというNVARCHAR(MAX)フィールドが含まれています。データベースの現在の文字列は、長さが956文字です。

コードがデータを呼び出し、有効なデータが返されます。 [Stuff happens]。更新コマンドが作成され、WHERE句の定義フィールドが使用されます。ゼロ行が更新されます。

私はクエリを傍受し、定義がどこから除外されたときにUPDATEコマンドが実行されることに気づいた。

DBに直接アクセスすると、単純なSELECT定義のWHERE Id = [idが何であれ]を実行しました。行が返されます。

次に、最初の結果から定義をコピーし、クエリをWHERE Definition = '[...]'に変更し、何も返されません。

私は内側のselectがIdで定義を取得し、外側がinner selectの結果にINを持つようにクエリを変更しました。それは行を返します。

これは、テキスト(ASCII)とNVARCHAR(UNICODE)の値を比較すると「問題」が発生すると考えられます。

私はまだ答えを得ようとしています。

*コードまたは奇妙なWHERE句でクエリを作成しているという事実にはコメントしないでください。

関連する問題