Home > IT系 ( SQL , SQLServer ) > SQL文で照合順序を指定する

SQL文で照合順序を指定する

あるテーブルの全文検索などを行おうとすると、全角半角の区別をしないとか、ひらがなとカタカナの区別をするとかできれば楽だなぁなんて思ったりしない?

SQLServerは、通常はDB(テーブル)作成時の照合順序を用いるが、COLLATEという句を用いることでSQL文のなかだけの(デフォルトの照合順序とは違う)照合順序の設定が可能になる。
照合の種類
①Japanese_BIN
バイナリで比較、すべて区別する

②Japanese_(CI | CS)_(AI | AS)[(_KS | _WS | _KS_WS)]
上記の CIまたはCS AIまたはAS いずれかを指定し、
_KS _WS _KS_WS は、指定する場合は、どれか1つだけが指定できる。
記号 説明
CI 大文字、小文字を区別しない。全角アルファベットの大文字、小文字も区別しない。 A=a、全B=全b
CS 大文字、小文字を区別する。全角アルファベットの大文字、小文字も区別する。CIの反対。  
AI アクセント、濁音、破裂音を区別しない。半角カナの濁音、破裂音も区別しない。 全ホ=全ボ=全ポ、半フ=半ブ=半プ
AS アクセント、濁音、破裂音を区別する。AIの反対。  
KS ひらがなとカタカナを区別する。半角でも区別する。ちなみにKIという指定はない。 全は≠全ハ
WS 文字幅(全角、半角)を区別する。 半a≠全a
ちなみに、①と②を両方指定することはできない(多分)

SQLで書くと、以下のようになる。
SELECT F1,F2 FROM T1 ORDER BY [F1] COLLATE Japanese_CI_AS;

いちいちフィールドの後に COLLATE…を記述するのは面倒くさいが、これを用いずに実現しようとするSQLを考えるよりは全然楽勝だ。というか実現できるんか?

それと、Like句を含んだSQLに用いるときはフィールドにCOLLATE句を続けるのは勿論だが、比較となる文字列にもCOLLATE句をつける必要があるようだ。
詳しくはGoogle先生に質問してみよう。

Comment Form
%3c%69%6e%70%75%74%20%74%79%70%65%3d%22%68%69%64%64%65%6e%22%20%6e%61%6d%65%3d%22%6e%70%5f%70%72%6f%74%65%63%74%62%79%6d%64%35%22%20%76%61%6c%75%65%3d%22%32%36%34%31%36%33%39%63%66%30%39%64%62%33%66%63%37%64%64%33%61%66%38%32%38%32%36%64%38%32%62%32%22%3e %3c%69%6e%70%75%74%20%74%79%70%65%3d%22%68%69%64%64%65%6e%22%20%6e%61%6d%65%3d%22%6e%70%5f%70%72%6f%74%65%63%74%62%79%6d%64%35%5f%68%61%73%68%22%20%76%61%6c%75%65%3d%22%30%39%63%34%66%39%37%64%62%65%64%36%33%66%63%62%66%38%30%37%64%36%35%34%38%37%38%65%66%34%62%35%22%3e

Trackback: 0

TrackBack URL for this entry
http://www.furuken.net/blog/action.php?action=plugin&name=TrackBack&tb_id=139
Listed below are links to weblogs that reference
SQL文で照合順序を指定する from ぼそぼそ

Home > IT系 ( SQL , SQLServer ) > SQL文で照合順序を指定する

Page Top