ソート・キー値を生成します。つまり、代替照合規則に基づいて文字列をソートする場合に使用できる値を生成します。
SORTKEY( string-expression [, { collation-id | collation-name[(collation-tailoring-string) ] } ] )
string-expression 文字列式には、データベース側文字セットでエンコードされた文字のみを指定できます。
string-expression が空の文字列の場合、SORTKEY 関数は長さ 0 のバイナリ値を返します。string-expression が NULL の場合、SORTKEY 関数は NULL 値を返します。空の文字列のソート順の値は、データベース・カラムの NULL 文字列の値とは異なります。
SORTKEY 関数が処理できる文字列の最大長は 254 バイトです。これより長い部分は、無視されます。
collation-name 使用するソート順の名前を指定する文字列または文字変数。また、alias char_collation または equivalently, db_collation を指定して、データベースが CHAR の照合に使用するソート・キーを生成するときに指定することもできます。同様に、エイリアス nchar_collation を指定して、データベースで使用している NCHAR の照合順でソート・キーを生成できます。
collation-id 使用するソート順の ID 番号を指定する変数、定数 (整数)、または文字列。collation-id を指定しない場合のデフォルトは、デフォルト Unicode マルチ言語です。有効な照合のリストについては、サポートされている照合と代替照合と推奨文字セットと照合を参照してください。
collation-tailoring-string オプションで、文字列のソートや比較を詳細に制御することを目的に、照合の適合化オプション (collation-tailoring-string) を指定できます。これらのオプションは、キーワード=値 の形式で、カッコで囲んで指定して、その後ろに照合名を記述します。たとえば、'UCA(locale=es;case=LowerFirst;accent=respect)'
のように記述します。これらのオプションの組み合わせを指定する構文は、CREATE DATABASE 文の COLLATION 句を定義する構文と同じです。照合の適合化オプションを参照してください。
UCA 照合を指定すると、照合の適合化のすべてのオプションがサポートされます。その他の照合の場合、大文字小文字の区別の適合化のみがサポートされます。
BINARY
SORTKEY 関数が生成する値を使用して、事前定義済みのソート順の動作に基づいて結果を順序付けることができます。これにより、データベース照合では使用できない文字ソート順の動作を操作できます。SORTKEY 関数から保持される値はバイナリ値で、入力文字列のエンコードされたソート順情報が含まれています。たとえば、SORTKEY 関数から返された値を、ソース文字列と一緒にカラムに格納できます。必要な順序で文字データを取り出すには、SORTKEY 関数の実行結果が格納されているカラムの SELECT 文に ORDER BY 句を指定するだけです。
SORTKEY 関数は、特定のソート順の基準セットに対して返された値が、varbinary データ型で実行されるバイナリ比較で使用できることを保証します。
クエリのソートキーを作成する作業には負荷がかかります。使用頻度の高いソートキーの代替手段として、ソートキーの値を保存する計算カラムを作成し、クエリの ORDER BY 句を使用してカラムを参照する方法を検討します。
SORTKEY 関数の入力は、各入力文字に対して最大 6 バイトのソート順情報を生成できます。SORTKEY 関数の出力は VARBINARY 型で、最大長は 1024 バイトです。
ソート・キーの生成中に照合に UCA を指定すると、デフォルトでは、照合の適合化はアクセント記号および大文字と小文字が区別されます。たとえば、UCA が自身によって指定されると、適用されるデフォルトの適合化は 'UCA(case=UpperFirst;accent=Respect;punct=Primary)'
に等しくなります。
SORTKEY に対する 2 番目のパラメータで別の照合を指定すると、その設定内容によって、デフォルトの設定内容が上書きされます。たとえば、次の 2 つの文は同じです。
SELECT SORTKEY( 'abc', 'UCA(accent=Ignore)' ); SELECT SORTKEY( 'abc', 'UCA(case=UpperFirst;accent=Ignore;punct=Primary)' ); |
UCA 以外の照合を指定しても、デフォルトでは、照合の適合化はアクセント記号および大文字と小文字が区別されます。ただし、UCA 以外の照合の場合、照合の適合化を使用して上書きできるのは、大文字と小文字の区別のみです。次に例を示します。
SELECT SORTKEY( 'abc', '1252LATIN1(case=Respect)' ); |
適合化オプションを指定しないで作成されたデータベースでは (たとえば、dbinit -c -zn uca mydb.db
)、次の 2 つの句では異なるソート順が生成されることがあります。これは、SORTKEY 関数に対してデータベースの照合名が指定されている場合でも同様です。
ORDER BY string-expression ORDER BY SORTKEY( string-expression, database-collation-name ) |
このような現象が起こるのは、データベースの作成に使用されたデフォルトの適合化設定と、SORTKEY 関数のデフォルトの適合化設定が異なるためです。SORTKEY でもデータベース照合と同じ動作が実行されるようにするには、データベース照合の設定に一致する collation-tailoring-string の調整構文を指定するか、collation-name に対して db_collation を指定します。次に例を示します。
SORTKEY( expression, 'db_collation' ) |
ソート・キー値は、どのバージョンの SQL Anywhere を使用してデータベース・ファイルが作成されたかによって異なります。たとえば、バージョン 10.0.0 より前の SQL Anywhere、SQL Anywhere バージョン 10、SQL Anywhere バージョン 11 で作成されたソート・キー値はそれぞれ異なります。このため、SQL Anywhere のあるバージョンで作成されたソート・キー値が別のバージョンの SQL Anywhere で作成されたデータベースに使用されると、アプリケーションで問題が発生する場合があります。
アンロードと再ロードを使用して SQL Anywhere ソフトウェアをアップグレードする場合は、データベースに格納されているソート・キー値を再生成することをおすすめします。
SQL/2003 ベンダ拡張。
次の文は、Employees テーブルに問い合わせ、すべての従業員の FirstName と Surname を返します。結果は、dict 照合 (Latin-1、英語、フランス語、ドイツ語辞書) を使用して、Surname カラムのソートキー値でソートされます。
SELECT Surname, GivenName FROM Employees ORDER BY SORTKEY( Surname, 'dict' ); |
次の例は、UCA 照合と適合化オプションを使用して、abc のソートキー値を返します。
SELECT SORTKEY( 'abc', 'UCA(locale=es;case=LowerFirst;accent=respect)' ); |
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |