構文

用途
NLSSORTは、charのソートに使用される文字列のバイトを戻します。
charおよび'nlsparam'は、CHAR、VARCHAR2、NCHARまたは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 BY、GROUP 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グローバリゼーション・サポート・ガイド』を参照してください。 |