構文
用途
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グローバリゼーション・サポート・ガイド』を参照してください。 |