検索結果を辞書順に取り出す、五十音順に取り出す

デフォルトのソートはバイナリ順に並び替えられる。これは他のソートに比べて高速に処理することが可能である。 しかし、大文字小文字や全角半角、濁点、半濁点を扱うときに問題が発生する。

各言語サポートソート (NLSSORT) 関数を使用することで、これらの問題を解決することが可能である。しかしコード変換に関する変換コストは発生する。

NLSSORT 関数と NLS_SORT パラメータ

関数名には NLSSORT とアンダースコア(アンダーバー)が入っていないが、パラメータの場合には NLS_SORT を設定するのでスペルミスに気をつける。

  • NLS_SORT=JAPANESE_M
  • NLS_SORT=JAPANESE_M_CI Oracle 10g
    大文字小文字を区別しない(Case Ignore)
    (注意) 通常の半角カナと全角カナは同一に扱われるが、半濁点、濁点のある半角カタカナと全角カタカナは同一として扱われない(Oracle 10g R1 : おそらくであるが、これが正しい仕様ではない気がする)。

NLSSORT 関数の使用例

使用例 : Oracle 10g R1(IA:32bit Win) キャラクタセット JA16SJISTILDE

SET PAGESIZE 100
COLUMN  KANA_TEXT FORMAT A10
COLUMN  JPN_M FORMAT A30
COLUMN  JPN_M_CI FORMAT A20
COLUMN  GB FORMAT A10
--
SELECT
	KANA_TEXT,
	NLSSORT(KANA_TEXT, 'NLS_SORT=JAPANESE_M') JPN_M,
	NLSSORT(KANA_TEXT, 'NLS_SORT=JAPANESE_M_CI') JPN_M_CI,
	NLSSORT(KANA_TEXT, 'NLS_SORT=GENERIC_BASELETTER') GB
FROM KANA_TBL
ORDER BY NLSSORT(KANA_TEXT, 'NLS_SORT=JAPANESE_M');
 
-- 実行結果
KANA_TEXT  JPN_M                          JPN_M_CI             GB
---------- ------------------------------ -------------------- ----------
a          01F50000020002                 01F5000002           6100
a         01F50000020003                 01F5000002           828100
A          01F50000020006                 01F5000002           4100
A         01F50000020007                 01F5000002           826000
 
b          01FA0000020002                 01FA000002           6200
b         01FA0000020003                 01FA000002           828200
B          01FA0000020006                 01FA000002           4200
B         01FA0000020007                 01FA000002           826100
 
ば         3DDE000002BD0002               3DDE000002BD         82CE00
バ         3DDE000002BD0003               3DDE000002BD         836F00
バ         3DDE3DBB00000202000403         3DDE3DBB00000202     CADE00
 
び         3DDF000002BD0002               3DDF000002BD         82D100
ビ         3DDF000002BD0003               3DDF000002BD         837200
ビ         3DDF3DBB00000202000403         3DDF3DBB00000202     CBDE00
 
ぶ         3DE0000002BD0002               3DE0000002BD         82D400
ブ         3DE0000002BD0003               3DE0000002BD         837500
ブ         3DE03DBB00000202000403         3DE03DBB00000202     CCDE00
 
17行が選択されました。

テストデータの構築スクリプト

CREATE TABLE RIVUS.KANA_TBL
(
	KANA_TEXT	VARCHAR2(20)
);
INSERT INTO KANA_TBL VALUES('バ');
INSERT INTO KANA_TBL VALUES('ビ');
INSERT INTO KANA_TBL VALUES('ブ');
INSERT INTO KANA_TBL VALUES('バ');
INSERT INTO KANA_TBL VALUES('ビ');
INSERT INTO KANA_TBL VALUES('ブ');
INSERT INTO KANA_TBL VALUES('ば');
INSERT INTO KANA_TBL VALUES('び');
INSERT INTO KANA_TBL VALUES('ぶ');
INSERT INTO KANA_TBL VALUES('a');
INSERT INTO KANA_TBL VALUES('b');
INSERT INTO KANA_TBL VALUES('A');
INSERT INTO KANA_TBL VALUES('B');
INSERT INTO KANA_TBL VALUES('a');
INSERT INTO KANA_TBL VALUES('b');
INSERT INTO KANA_TBL VALUES('A');
INSERT INTO KANA_TBL VALUES('B');
COMMIT;


関連事項

検索結果を辞書順に取り出すの関連トピックス

日本オラクル
■ 日本オラクル 株式会社
■ オラクルマスター資格 (オラクルマスターとは
■ Oracle のライセンスがわからない…
Oracle Direct (ネットで聞いても最後はここで要確認)