RIGHT スカラー関数
RIGHT 関数は、string-expression の右端にある長さ length のストリングを戻します (長さは、指定のストリング単位での長さになります)。
スキーマは SYSIBM です。RIGHT 関数の SYSFUN バージョンは引き続き使用可能です。
string-expression が文字ストリングである場合、結果は文字ストリングです。 string-expression が GRAPHIC ストリングである場合、結果は GRAPHIC ストリングです。
- string-expression
- 結果を取り出すストリングを指定する式。 この式は、組み込みデータ・タイプであるストリング、数値、ブール、日時のいずれかの値を返す必要があります。 値がストリング・データ・タイプでない場合、その値は関数を評価する前に 暗黙的に VARCHAR にキャストされます。string-expression のサブストリングは、string-expression のゼロ個以上の連続したコード・ポイントです。
- length
-
結果の長さを指定する式。 式は組み込み数値、CHAR、VARCHAR、GRAPHIC、または VARGRAPHIC のいずれかのデータ・タイプの値を戻す必要があります。値がタイプ INTEGER でない場合、 その値は関数を評価する前に暗黙的に INTEGER にキャストされます。 length は 0 以上でなければなりません (SQLSTATE 22011)。OCTETS が指定され、結果が GRAPHIC データである場合、値は偶数でなければなりません (SQLSTATE 428GC)。
length が定数でなく、ストリング単位が指定されない場合、length は string-expression の長さ属性以下でなければなりません (SQLSTATE 22011)。
length が定数でなく、ストリング単位が指定される場合、length は、次の表 1 に示す値以下でなければなりません (SQLSTATE 22011)。
表 1. ストリング単位が指定された場合の length の最大値 string-expression のストリング単位 指定されたストリング単位 length の最大値 L = string-expression の長さ属性
string-expression のストリング単位 指定されたストリング単位 length の最大値 L = string-expression の長さ属性
OCTETS OCTETS L OCTETS CODEUNITS16 L/2 OCTETS CODEUNITS32 L/4 CODEUNITS16 OCTETS L*2 CODEUNITS16 CODEUNITS16 L CODEUNITS16 CODEUNITS32 L/2 CODEUNITS32 OCTETS L*4 CODEUNITS32 CODEUNITS16 L*2 CODEUNITS32 CODEUNITS32 L length が定数の場合は、以下のようになります。- string-expression が CHAR、VARCHAR、GRAPHIC、または VARGRAPHIC の場合、length は、32 672 OCTETS、16 336 CODEUNITS16、または 8 168 CODEUNITS32 以下でなければなりません (SQLSTATE 22011)。
- string-expression が CLOB または DBCLOB の場合、length は、2147483647 OCTETS、1 073 741 823 CODEUNITS16、または 536870911 CODEUNITS32 以下でなければなりません (SQLSTATE 22011)。
- string-expression が BLOB の場合、length は 2147483647 OCTETS 以下でなければなりません (SQLSTATE 22011)。
- CODEUNITS16、CODEUNITS32、または OCTETS
- length のストリング単位を指定します。
CODEUNITS16 を指定すると、length は、16 ビットの UTF-16 コード単位の長さになります。CODEUNITS32 を指定すると、length は、32 ビットの UTF-32 コード単位の長さになります。OCTETS を指定すると、length は、バイト単位の長さになります。
ストリング単位として CODEUNITS16 または CODEUNITS32 を指定した場合に、string-expression がバイナリー・ストリングまたはビット・データであれば、エラーが戻されます (SQLSTATE 428GC)。ストリング単位として OCTETS を指定した場合に、string-expression が GRAPHIC ストリングであれば、length は偶数でなければなりません。そうでない場合は、エラーが戻されます (SQLSTATE 428GC)。ストリング単位が明示的に指定されなければ、string-expression のストリング単位によって、使用される単位が決定されます。 CODEUNITS16、CODEUNITS32、および OCTETS の詳細については、『文字ストリング』の『組み込み関数のストリング単位』を参照してください。
string-expression の右側には必要な数の埋め込み文字が埋め込まれ、string-expression の指定のサブストリングが常に存在するようになります。 埋め込み用の文字は、埋め込みが行われるコンテキストでストリングに埋め込みを適用するための文字と同じです。埋め込みの詳細については、『ストリング割り当て』と『割り当てと比較』を参照してください。
- string-expression が CHAR または VARCHAR の場合は VARCHAR
- string-expression が CLOB の場合は CLOB
- string-expression が GRAPHIC または VARGRAPHIC の場合は VARGRAPHIC
- string-expression が DBCLOB の場合は DBCLOB
- string-expression が BINARY または VARBINARY の場合は VARBINARY
- string-expression が BLOB の場合は BLOB
- length が定数でない場合、結果の長さ属性は string-expression の長さ属性と同じになります。
- length が定数で、ストリング単位が指定されていない場合、結果の長さ属性は、length と string-expression の長さ属性のうち大きい方になります。
- length が定数で、ストリング単位が指定されている場合、結果の長さ属性は、次の表 2 に示すようになります。
表 2. length が定数でストリング単位が指定されている場合の結果の長さ属性 string-expression のストリング単位 指定されたストリング単位 length の最大値 L = string-expression の長さ属性
OCTETS OCTETS max(L, length) OCTETS CODEUNITS16 max(L, length * 2) OCTETS CODEUNITS32 max(L, length * 4) CODEUNITS16 OCTETS max(L, length / 2) CODEUNITS16 CODEUNITS16 max(L, length) CODEUNITS16 CODEUNITS32 max(L, length * 2) CODEUNITS32 OCTETS max(L, length / 4) CODEUNITS32 CODEUNITS16 max(L, length / 2) CODEUNITS32 CODEUNITS32 max(L, length)
引数のいずれかが NULL になる可能性がある場合、結果も NULL になる可能性があります。 引数のいずれかが NULL の場合、その結果は NULL 値です。
例
- 例 1: 変数 ALPHA の値が「ABCDEF」であるとします。以下のステートメント:
ALPHA の右端の 3 文字である「DEF」が戻されます。SELECT RIGHT(ALPHA,3) FROM SYSIBM.SYSDUMMY1 - 例 2: VARCHAR(50) で定義されている変数 NAME の値「KATIE AUSTIN」、整変数 LASTNAME_LEN の値が 6 であると想定して、以下のステートメントを実行します。
値 「AUSTIN」が戻されます。SELECT RIGHT(NAME,LASTNAME_LEN) FROM SYSIBM.SYSDUMMY1 - 例 3: 以下のステートメントは、長さゼロのストリングを戻します。
SELECT RIGHT('ABCABC',0) FROM SYSIBM.SYSDUMMY1 - 例 4: EMPLOYEE 表の FIRSTNME 列は、VARCHAR(12) として定義されています。「BROWN」というラストネームの従業員のファーストネームを検出し、そのファーストネームを 10 バイト・ストリングで戻すには、以下のようにします。
「DAVID」という値の後に 5 つのブランク文字が埋め込まれた VARCHAR(12) ストリングが戻されます。SELECT RIGHT(FIRSTNME, 10) FROM EMPLOYEE WHERE LASTNAME = 'BROWN' - 例 5: Unicode データベースでは、FIRSTNAME が VARCHAR(12) の列になっています。その値の 1 つは、6 文字のストリング「Jürgen」です。FIRSTNAME が以下の値を持つ場合:
Function... Returns... RIGHT(FIRSTNAME,5,CODEUNITS32) 'ürgen' -- x'C3BC7267656E' RIGHT(FIRSTNAME,5,CODEUNITS16) 'ürgen' -- x'C3BC7267656E' RIGHT(FIRSTNAME,5,OCTETS) 'rgen' -- x'207267656E', a truncated string - 例 6: 以下の例は、Unicode ストリング "&N~AB" に対応します。
"&" は音楽のト音記号、"~" は結合チルド文字です。以下の例では、このストリングを異なる Unicode エンコード方式で示しています。
&
N
~
A
B
UTF-8 X'F09D849E' X'4E' X'CC83' X'41' X'42' UTF-16BE X'D834DD1E' X'004E' X'0303' X'0041' X'0042' 20 バイトの長さ属性が指定されている変数 UTF8_VAR に、ストリングの UTF-8 表現が格納されると想定します。
それぞれ、SELECT RIGHT(UTF8_VAR, 2, CODEUNITS16), RIGHT(UTF8_VAR, 2, CODEUNITS32), RIGHT(UTF8_VAR, 2, OCTETS) FROM SYSIBM.SYSDUMMY1AB
、AB
、AB
' の値を戻します。
それぞれ、SELECT RIGHT(UTF8_VAR, 5, CODEUNITS16), RIGHT(UTF8_VAR, 5, CODEUNITS32), RIGHT(UTF8_VAR, 5, OCTETS) FROM SYSIBM.SYSDUMMY1?N~AB
、&N~AB
、N~AB
の値を戻します (?は X'EDB49E' です)。
それぞれ、SELECT RIGHT(UTF8_VAR, 10, CODEUNITS16), RIGHT(UTF8_VAR, 10, CODEUNITS32), RIGHT(UTF8_VAR, 10, OCTETS) FROM SYSIBM.SYSDUMMY1&N~ABbbbb
、&N~ABbbbbb
、&N~ABb
の値を戻します (b
はブランク文字です)。20 コード単位の長さ属性が指定されている変数 UTF16_VAR に、ストリングの UTF-16BE 表現が格納されると想定します。
それぞれ、SELECT RIGHT(UTF16_VAR, 2, CODEUNITS16), RIGHT(UTF16_VAR, 2, CODEUNITS32), RIGHT(UTF16_VAR, 2, OCTETS)) FROM SYSIBM.SYSDUMMY1AB
、AB
、B
の値を戻します。
それぞれ、SELECT RIGHT(UTF16_VAR, 5, CODEUNITS16), RIGHT(UTF16_VAR, 5, CODEUNITS32), RIGHT(UTF16_VAR, 6, OCTETS) FROM SYSIBM.SYSDUMMY1?N~AB
、&N~AB
、~AB
の値を戻します (? はスタンドアロン下位サロゲート X'DD1E' です)。
それぞれ、SELECT RIGHT(UTF16_VAR, 10, CODEUNITS16), RIGHT(UTF16_VAR, 10, CODEUNITS32), RIGHT(UTF16_VAR, 10, OCTETS) FROM SYSIBM.SYSDUMMY1&N~ABbbbb
、&N~ABbbbbb
、?N~AB
の値を戻します (b
はブランク文字、? は X'DD1E' です)。
