☆照合順序 COLLATE
これもDelphiの話ではなくSQL Serverの話です。
SQL Serverでは、文字列の照合時に COLLATE を使うと半角全角を無視したり、反対に厳格にしたりできます。
ただ、私がはまったのは次のようなものでした。
対応策としては、FIELD1とFIELD2を分けて、それぞれの照合をORで繋ぐか、テーブル作成時にNULLを許可しない等の工夫が必要になるようです。
SQL Serverでは、文字列の照合時に COLLATE を使うと半角全角を無視したり、反対に厳格にしたりできます。
[Field1のデータ] コンクリート こんくりーと コンクリート (A) SELECT FIELD1 FROM TABLE1 WHERE FIELD1 COLLATE Japanese_BIN LIKE '%こんくりーと%' [表示結果] こんくりーと (B) SELECT FIELD1 FROM TABLE1 WHERE FIELD1 COLLATE Japanese_CI_AS LIKE '%こんくりーと%' [表示結果] コンクリート こんくりーと コンクリート上記の例については、いまさら説明は要らないかも知れませんね。
ただ、私がはまったのは次のようなものでした。
[FIELD1のデータ] コンクリート こんくりーと コンクリート [FIELD2のデータ] null null fc=21 (A) SELECT FIELD1 FROM TABLE1 WHERE (FIELD1+' '+FIELD2) COLLATE Japanese_BIN LIKE '%こんくりーと%' [表示結果] なし (B) SELECT FIELD1 FROM TABLE1 WHERE (FIELD1+' '+FIELD2) COLLATE Japanese_CI_AS LIKE '%こんくりーと%' [表示結果] コンクリートFIELD2を足しただけなのになんで期待した結果にならないのだろう?とずっと悩んでしまいました。結局、文字列+NULLになっていることに気づいたときには、なんでこんな初歩的なことで・・・とショックでした。
対応策としては、FIELD1とFIELD2を分けて、それぞれの照合をORで繋ぐか、テーブル作成時にNULLを許可しない等の工夫が必要になるようです。
| 固定リンク