NORMALIZE_STRING スカラー関数

NORMALIZE_STRING 関数は、Unicode ストリングを引数として取り、比較に使用できる、正規化されたストリングを戻します。

NORMALIZE_STRING 関数は、同じに見えるが (例えば Å は、UTF-16 で X'00C5' および X'0041030a' としてエンコードできる) 同じ Unicode コード・ポイントを使用してエンコードされていない可能性がある 2 つのストリングを、比較可能な正規形に変換することができます。

構文図を読むビジュアルシンタックスダイアグラムをスキップするNORMALIZE_STRING( ユニコード文字列,NFCNFDNFKCNFKD,整数)

スキーマは SYSIBM です。

ユニコード文字列
Unicode UTF-8 または Unicode UTF-16 のいずれかの、LOB 以外の組み込みの文字ストリング・データ・タイプまたはグラフィック・ストリング・データ・タイプの値を戻す式。 この関数で使用するために、CAST 指定を使って ASCII または EBCDIC データを Unicode に変換することができます。
NFC、NFD、NFKC、または NFKD
正規形を指定します。
NFC
正規分解のあとに正規合成
NFD
正規分解
NFKC
互換分解のあとに正規合成
NFKD
互換分解
整数
結果として得られる可変長ストリングの長さ属性。このストリングが文字ストリングの場合はバイト単位、ストリングがグラフィック・ストリングの場合は 2 バイト・コード・ポイント単位です。 値は、ソース文字列が文字の場合は1~32704の範囲の整数、ソース文字列がグラフィックの場合は16352でなければなりません。

この関数の結果は可変長ストリングで、そのデータ・タイプは unicode-string のデータ・タイプによって決まります。

  • unicode-string が CHAR または VARCHAR の場合は VARCHAR
  • unicode-string が GRAPHIC または VARGRAPHIC の場合は VARGRAPHIC

結果の CCSID は unicode-string の CCSID と同じです。

結果の長さ属性は、integer を指定したかどうかによって異なります。 integer を指定した場合、結果の長さ属性は integer バイトまたは 2 バイト・コード・ポイントになります。 integer を指定しない場合、結果の長さ属性は、文字ストリングの場合は MIN(3*n,32704)、グラフィック・ストリングの場合は MIN(3*n,16352) になります。ここで n は、ソースの長さ属性です。

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

例 1: 次の例では、「ábc」が正規形 NFC に正規化されます。
    SET :hv1 = NORMALIZE_STRING('ábc',NFC) -- x'0061030100620063'
hv1 は「ábc」-- X'00E100620063' に設定されます。 正規形 NFC を使用して、2 つのコード・ポイント・シーケンス X'00610301' (文字「á」を表す) は X'00E1' (これも事前構成された X'00610301' に等価) に正規化されます。
例 2: 次の例では、「ábc」が正規形 NFD に正規化されます。
    SET :hv1 = NORMALIZE_STRING('ábc',NFD) -- x'00E100620063'
hv1 は「ábc」-- X'0061030100620063' に設定されます。 正規形 NFD を使用して、コード・ポイント X'00E1' は 2 つのコード・ポイント・シーケンス X'00610301' に分解されます。これはローマ字小文字「a」と揚音アクセントの結合文字で構成されています。