COLLATION_KEY スカラー関数

COLLATION_KEY 関数は、指定された照合内の引数の照合キーを表す可変長バイナリー・ストリングを戻します。

構文図を読むビジュアルシンタックスダイアグラムをスキップするCOLLATION_KEY( 文字列式, 照合名,整数)

スキーマは SYSIBM です。

1 つのストリングの COLLATION_KEY の結果を別のストリングの COLLATION_KEY の結果とバイナリー形式で比較することにより、指定の collation-name 内の順序を決めることができます。 比較が意味をもつためには、COLLATION_KEY の結果が同じ collation-name から得られたものであることが必要です。
文字列式
照合キーを判別するための、LOB 以外の文字ストリングまたはグラフィック・ストリングを戻す式。 string-expression が文字ストリングの場合、FOR BIT DATA であってはなりません。 string-expression が Unicode UTF-16 (CCSID 1200) でない場合は、Unicode UTF-16 に変換してから、対応する照合キーを取得します。 string-expression の長さは、UTF-16 表現の 32704 バイトを超えてはなりません。
照合名
バイナリー・ストリング、CLOB、または DBCLOB ではないストリング定数またはストリング・ホスト変数。 collation-name は、照合キーを決定するときに使用する照合を指定します。 collation-name が EBCDIC 値でない場合は、EBCDIC に変換されます。 照合名の長さは、EBCDIC 表現で 1~255 バイトの範囲でなければなりません。 collation-name の値は、大/小文字の区別がなく、領域 CUN4BOPR 内でパラメーター CUNBOPRM_Collation_Keyword に対して左寄せされた有効な「短パス」照合設定でなければなりません。 パラメータCUNBOPRM_Collation_Keywordの「ショートパス」設定の詳細については、 CUNBOPRM領域のパラメータの説明を参照してください。

ホスト変数の値は NULL であってはなりません。 ホスト変数に標識変数がある場合、その標識変数の値は NULL 値を示すものであってはなりません。 collation-name は、ホスト変数内で左寄せする必要があります。 また、長さがホスト変数の長さより短く、ホスト変数が固定長 CHAR または GRAPHIC データ・タイプの場合には、右側にブランクを埋め込む必要があります。

collation-name は、CUN4BOPR_Collation_Keyword 指定の形式です。 z/OS® CUNBOPR_Collation_Keyword パラメータに許容される値を指定する必要があります。

下の表は、サポートされる値の一部のものをリストしています。
表 1. Collation キーワード参照
属性名 キー 戻される値
ロケール L.R.V < ロケール>
強さ S 1、2、3、4、I、D
Case_Level K X、O、D
Case_First C X、L、U、D
代替 A N、S、D
Variable_Top T < 16 進数字>
正規化 N X、O、D
フランス語 F X、O、D
Hinayana H X、O、D
次の表に、照合キーワードの省略形を示します。
省略語
定義
D
デフォルト
O
on
X
オフ
1
primary
2
2 次
3
3 次
4
4 次
I
同一
S
シフト
N
無視不可
L
小文字優先
U
大文字優先
以下の例は、上記の指定を使用したキーワードを示しています。
'UCA400R1_AS_LSV_S3_CU'
UCA バージョン 4.0.1、スペース、句読点、および記号を無視、スウェーデン語の規則を使用、大文字優先使用、大/小文字の区別をして比較。
'UCA400R1_AN_LSV_S3_CL_NO'
UCA バージョン 4.0.1。スペース、句読点、および記号を無視しない。スウェーデン語の規則を使用。小文字優先使用 (または、設定しない。ほとんどの地域では小文字がデフォルトとして使用されるため、これを設定しなくても同じ意味になります)。正規化 ON。大/小文字の区別をして比較。
整数
結果の長さ属性を指定する整数値。 指定する場合は、値は1~32704の範囲の整数定数でなければなりません。
長さを指定しない場合、結果の長さ属性は、次のように決められます。
文字列式 結果の長さ属性
CHAR(n) または VARCHAR(n) MIN (VARB INARY(12n ), 32704)
GRAPHIC(n) または VARGRAPHIC(n) MIN (VARB INARY(12n ), 32704)

長さを指定するかどうかに関係なく、照合キーの長さは、結果の長さ属性以下でなければなりません。 照合キーの結果の実際の長さは、string-expression の約 6 倍になります (string-expression の長さは Unicode バイト表現)。 特定の collation-name (例えば、UCA410_LKO_RKR (韓国語の照合)) では、結果のデフォルトの長さ属性 (12n) では大きさが不十分なことがあり、その場合はエラーが戻されます。 こうしたエラーを避けるために、結果の長さ属性は、より大きい定数を明示的に指定する必要があります。 結果の適切な長さ属性については、Collation Servicesのターゲットバッファ長の考慮事項に関する情報を、エリアCUNBOPRMのパラメータの説明を参照してください。

結果は NULL になる可能性があります。第 1 引数が NULL の場合、結果は NULL 値となります。

COLLATION_KEY関数は、 z/OS のUnicode照合サービスを使用して照合キーを返します。 サポートされている照合バージョンのリストについては、「照合にサポートされているロケール」を参照してください。

COLLATION_KEY関数が実行された際にUnicode照合サービスが利用できない場合、エラーが返されます。

例1: 以下のクエリは、デフォルトのUnicode照合アルゴリズム V4.0.1(UCA を使用し、スペース、句読点、および記号を無視し、スウェーデン語の言語規則に従い、大文字と小文字を比較せずに、従業員の姓でソートします
   SELECT FIRSTNAME, LASTNAME 
     FROM DSN8D10.EMP
     ORDER BY COLLATION_KEY(LASTNAME, 'UCA400R1_AS_LSV_S2');
例 2: 以下の照会は、文化的に公正な比較を行うために、LASTNAME 列と SALES_PERSON 列に対して COLLATION_KEY 関数を使用して、同じ照合名からソート・キーを取得します。 これは、ケベックの従業員の部門を検索します。
   SELECT E.WORKDEPT 
     FROM EMPLOYEE AS E INNER JOIN SALES AS S
     ON COLLATION_KEY(E.LASTNAME, 'UCA400R1_LFR_RCA') =
                      COLLATION_KEY(S.SALES_PERSON, 'UCA400R1_LFR_RCA')
     WHERE S.REGION = 'Quebec';
例 3: ドイツ語に合わせた照合名「UCA410_LDE」を使用して、組み込み関数 COLLATION_KEY に基づいて、表 EMPLOYEE の索引 EMPLOYEE_NAME_SORT_KEY を作成します。
   CREATE INDEX EMPLOYEE_NAME_SORT_KEY
     ON EMPLOYEE (COLLATION_KEY(LASTNAME, 'UCA410_LDE', 600),
                  COLLATION_KEY(FIRSTNAME, 'UCA410_LDE', 600),
                  ID);