プライマリ・コンテンツに移動
Oracle® Database SQL言語リファレンス
11gリリース2 (11.2)
B56299-08
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

NLSSORT

構文

nlssort.gifの説明が続きます。
図「nlssort.gif」の説明

用途

NLSSORTは、charのソートに使用される文字列のバイトを戻します。

charおよび'nlsparam'は、CHARVARCHAR2NCHARまたはNVARCHAR2データ型です。

'nlsparam'の値は次の書式で指定します。

'NLS_SORT = sort'

sortは、言語ソート基準(照合)またはBINARYのいずれかです。'nlsparam'を省略すると、このファンクションはセッションに対してデフォルトのソート基準を使用します。BINARYを指定すると、このファンクションはcharを戻します。

'nlsparam'を指定した場合、言語ソート名に接尾辞_aiを追加してアクセント記号の有無を区別しないソートを行うか、または_ciを追加して大/小文字を区別しないソートを行うことができます。アクセント記号の有無および大/小文字を区別しないソートの詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。

戻される文字列(照合キーとも呼ばれる)は、RAWデータ型です。指定された照合用に特定のchar値から生成される照合キーの長さが2000バイトを超えることがあります。これはNLSSORTによって戻されるRAW値の最大長です。この場合、NLSSORTは、計算結果が2000バイトを超えないように、charの最長の接頭辞(先頭のサブストリング)の照合キーを計算します。単一言語の照合(たとえばFRENCH)の場合、通常、接頭辞の長さは1000文字です。複数言語の照合(たとえばGENERIC_M)の場合、通常、接頭辞の長さは500文字です。照合およびcharに含まれる文字によっては、正確な長さが短くなったり長くなる場合があります。

この動作は、言語の順序付けを決定するためにその照合キー(NLSSORTの結果)が比較される2つの文字値が、正確な文字位置は異なっていても、接頭辞が同じである場合に、等しいとみなされることを意味します。NLSSORTファンクションは、比較条件、BETWEEN条件、IN条件、ORDER BYGROUP BYおよびCOUNT(DISTINCT)での言語の順序付けを決定するために暗黙的に使用されるため、長い文字値に対しては、これらの操作がおよその結果のみを戻すことがあります。これは、現在の比較アーキテクチャの制限事項です。現在、正確な言語比較の結果を確実に戻すための唯一の方法は、499文字(単一言語の照合の場合)および249文字(複数言語の照合の場合)より長い文字値を比較しないことです。

このファンクションは、CLOBデータを直接的にサポートしていません。ただし、暗黙的なデータ変換を使用してCLOBを引数として渡すことはできます。


関連項目:

詳細は、「データ型の比較規則」を参照してください。

このファンクションを使用すると、文字列の2進値を基にしたソートおよび比較ではなく、言語ソート基準を基にしたソートおよび比較を指定できます。次の例では、2つの値を含むテスト表を作成し、戻される値がNLSSORTファンクションによってどのように順序付けられるかを示します。

CREATE TABLE test (name VARCHAR2(15));
INSERT INTO test VALUES ('Gaardiner');
INSERT INTO test VALUES ('Gaberd');
INSERT INTO test VALUES ('Gaasten');

SELECT *
  FROM test
  ORDER BY name;

NAME
---------------
Gaardiner
Gaasten
Gaberd

SELECT *
  FROM test
  ORDER BY NLSSORT(name, 'NLS_SORT = XDanish');

NAME
---------------
Gaberd
Gaardiner
Gaasten

次の例では、比較操作でのNLSSORTファンクションの使用方法を示します。

SELECT *
  FROM test
  WHERE name > 'Gaberd'
  ORDER BY name;

no rows selected

SELECT *
  FROM test
  WHERE NLSSORT(name, 'NLS_SORT = XDanish') > 
        NLSSORT('Gaberd', 'NLS_SORT = XDanish')
  ORDER BY name;

NAME
---------------
Gaardiner
Gaasten

同一の言語ソート基準を使用する比較操作で頻繁にNLSSORTを使用する場合、NLS_COMPパラメータ(データベース用か現行のセッション用のいずれか)にLINGUISTICを設定し、セッションのNLS_SORTパラメータに必要なソート基準を設定するとより効率的です。これによって、現行のセッション中のすべてのソート操作および比較操作において、デフォルトでそのソート基準が使用されるようになります。

ALTER SESSION SET NLS_COMP = 'LINGUISTIC';
ALTER SESSION SET NLS_SORT = 'XDanish';

SELECT *
  FROM test
  WHERE name > 'Gaberd'
  ORDER BY name;

NAME
---------------
Gaardiner
Gaasten

関連項目:

ソート基準の詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。