CHAR スカラー関数
CHAR 関数は、引数の固定長文字ストリング表示を戻します。
CHAR 関数の構文は、入力引数のデータ・タイプによって異なります。 次のタイプの入力引数が受け入れられます。
整数から文字:
10 進数から文字:
浮動小数点から文字:
10 進浮動小数点から文字:
文字から文字:
グラフィックから文字:
日時から文字:
行 ID から文字:
スキーマは SYSIBM です。
CHAR 関数は、以下のいずれかの値の固定長文字ストリング表示を戻します。
- 整数 (最初の引数が SMALLINT、INTEGER、または BIGINT の場合)
- 最初の引数が 10 進数である場合は 10 進数
- 倍精度浮動小数点数 (最初の引数が DOUBLE または REAL の場合)
- 最初の引数が DECFLOAT である場合は 10 進浮動小数点数。
- 文字ストリング値 (最初の引数がいずれかのタイプの文字ストリングの場合)
- グラフィック・ストリング (最初の引数が EBCDIC または Unicode グラフィック・ストリングの場合)
- 最初の引数が日付、時刻、またはタイム・スタンプである場合は日時値
- 最初の引数が行 ID である場合は行 ID 値
この関数の結果は固定長文字ストリング (CHAR) です。
結果は NULL になる可能性があります。第 1 引数が NULL の場合、結果は NULL 値となります。
- 整数から文字
- 整数式
- 組み込み整数データ・タイプ (SMALLINT、INTEGER、または BIGINT) の値を戻す式。
結果は SQL 整定数形式の引数の固定長文字ストリング表示です。 結果は、引数の値を表すために使用できる最小文字数で、ブランクが埋め込まれます。 結果は、引数の値を表す有効数字である n 文字で構成されます。引数が負の場合は、負符号 (-) が前に付きます。 正の値は数字で始まり、常に少なくとも 1 つの末尾ブランクを含みます。 これに先行ゼロは含まれません。 結果は左揃えされます。
- 引数が短精度整数の場合、結果の長さは 6 です。 結果の文字数が 6 未満の場合は、結果の右側にブランクが埋め込まれます。
- 引数が長精度整数の場合、結果の長さは 11 になります。結果の文字数が 11 未満の場合、結果の右側にブランクが埋め込まれます。
- 引数が 64 ビット整数の場合、結果の長さは 20 です。 結果の文字数が 20 より少ない場合は、結果の右側にブランクが埋め込まれます。
正の値は常に 1 つの末尾ブランクを含みます。
結果の CCSID は、アプリケーションのコード化スキームから決定されます。
- 10 進数から文字
- 小数式
- 組み込み 10 進データ・タイプの値を戻す式。 式の値に別の精度と位取りを指定するには、CHAR 関数を適用する前に DECIMAL 関数を適用します。
- 十進文字
- 結果文字ストリングの中で 10 進数を区切るために使用する 1 バイト文字定数を指定します。 この文字は数字、正符号 (+)、 負符号 (-)、またはブランクであってはなりません。 デフォルトはピリオド(.)またはカンマ(,)です。選択を決定する要因に関する詳細は、 小数点の表記をご覧ください。
結果は、最初の引数の固定長文字ストリング表現です。 結果は、引数の値を表すために使用できる最小文字数です。ただし、後続ゼロは含まれません。
この結果には、1 文字の小数点文字と p 桁までの数字が含まれます。p は decimal-expression の精度で、引数が負数の場合は負符号が先頭に付きます。 正の値は、数字または 10 進数で始まり、常に少なくとも 1 つの末尾ブランクを含みます。 先行ゼロは返されません。 decimal-expression の位取りがゼロの場合、小数点文字は戻されません。 結果のバイト数が定義された結果の長さよりも少ない場合、結果は右側に空白で埋められます。 1
結果の長さは 2 +p です。ここで、p は decimal-expression の精度です。
結果のCCSIDは、 文字列のエンコード・スキームとCCSIDのルールの説明に従って決定される。
- 浮動小数点から文字
- 浮動小数点演算式
- 組み込み浮動小数点データ・タイプ (DOUBLE または REAL) の値を戻す式。
結果は SQL 浮動小数点定数形式の引数の固定長文字ストリング表示です。 結果の最初の文字は、引数が負であれば、負符号となります。負でなければ、 最初の文字は数字です。 引数がゼロであると、結果は 0E0 になります。
結果の長さは 24 文字です。 結果には、引数の値を表すことができる最小文字数が含まれます。小数部は、ゼロ以外の 1 桁の数字と、それに続くピリオドと数字のシーケンスで構成されます。
結果の文字数が 24 より少ない場合は、結果の右側にブランクが埋め込まれます。
結果のCCSIDは、 文字列のエンコード・スキームとCCSIDのルールの説明に従って決定される。
- 10 進浮動小数点から文字
- 十進浮動小数点表現
- 組み込み 10 進浮動小数点データ・タイプ (DECFLOAT) の値を戻す式。
結果は SQL 10 進浮動小数点定数形式の引数の固定長文字ストリング表示です。
結果値が Infinity、sNaN、または NaN の場合、ストリング「INFINITY」、「SNAN」、および「NAN」がそれぞれ返されます。 DECFLOAT 特殊値 sNaN は、ストリングへの変換時に例外になりません。
結果の長さは 42 です。 結果の文字数が 42 未満の場合は、結果の右側にブランクが埋め込まれます。 後続ゼロは有効数字です。 引数が負である場合、結果の先頭の文字は負符号 (-) になります。 それ以外の場合、先頭文字は数字、または結果値が Infinity、sNaN、または NaN の場合は文字です。
結果のCCSIDは、 文字列のエンコード・スキームとCCSIDのルールの説明に従って決定される。
- 文字から文字
- 文字表現
- 組み込み文字ストリングの値を返す式。
- 整数
- 結果として得られる固定長文字ストリングの長さ属性。 値は、1~255の範囲の整数定数でなければなりません。
長さを指定しない場合、結果の長さ属性は、255 と character-expression の長さ属性のうちの最小値になります。 character-expression が 空ストリング定数の場合、エラーが発生します。
もし CODEUNITS16 または CODEUNITS32 が指定されている場合は、結果文字列の長さ属性を計算する方法については、「最終結果の長さ属性の決定」を参照してください。
- CODEUNITS16、 CODEUNITS32または OCTETS
- integer を表すのに使用する単位を指定します。 文字式がビットデータとして定義された文字列である場合、 CODEUNITS16 指定できません。 CODEUNITS32 指定できません。
- CODEUNITS16
- integer が、16 ビットの UTF-16 コード単位の形で表現されるこ とを指定します。
- CODEUNITS32
- integer が、32 ビットの UTF-32 コード単位の形で表現されるこ とを指定します。
- OCTETS
- integer が、バイトの形で表現されることを指定します。
実際の長さは、結果の長さ属性と同じになります。 character-expression の長さが結果の長さ属性より短い場合、 結果は結果の長さになるまでブランクが埋め込まれます。 character-expression の長さが結果の長さ属性より長い場合、 結果は切り捨てられます。 切り捨てられたすべての文字がブランクでないと、警告が戻されます。
character-expression がビット・データである場合、結果はビット・データ になります。 それ以外の場合、 結果の CCSID は character-expression の CCSID と同じです。
- グラフィックから文字
- グラフィック表現
- 組み込みグラフィック・ストリングの値を戻す式。
- 整数
- 結果として得られる固定長文字ストリングの長さ属性。 値は、1~255の範囲の整数定数でなければなりません。
長さを指定しない場合、結果の長さ属性は、255 と graphic-expression の長さ属性のうちの最小値になります。 graphic-expression の長さ属性は (3 * length(graphic-expression)) です。 graphic-expression が 空ストリング定数の場合、エラーが発生します。
もし CODEUNITS16 または CODEUNITS32 が指定されている場合は、結果文字列の長さ属性を計算する方法については、「最終結果の長さ属性の決定」を参照してください。
- CODEUNITS16 または CODEUNITS32
- integer を表すのに使用する単位を指定します。
- CODEUNITS16
- integer が、16 ビットの UTF-16 コード単位の形で表現されるこ とを指定します。
- CODEUNITS32
- integer が、32 ビットの UTF-32 コード単位の形で表現されるこ とを指定します。
実際の長さは、結果の長さ属性と同じになります。 graphic-expression の長さが結果の長さ属性より短い場合、 結果は結果の長さになるまでブランクが埋め込まれます。 graphic-expression の長さが結果の長さ属性より長い場合、 結果は切り捨てられます。 切り捨てられたすべての文字がブランクでないと、警告が戻されます。
結果の CCSID は、graphic-expression のグラフィック CCSID に対応する文字混合 CCSID です。
- 日時から文字
- 日時表現
- 次に示す組み込みデータ・タイプのうちいずれかの式。
- 日付
- 結果は、その日付を 2 番目の引数で指定した形式で文字ストリング表示した
ものとなります。 2 番目の引数を省略した場合、形式は、DATE プリコンパイラー・オプション
があればこれによって、なければインストール・パネル DSNTIP4 のフィールド DATE FORMAT に
よって指定されます。 フォーマットが LOCAL、インストールパネルのLOCAL DATE LENGTHフィールド DSNTIP4 は結果の長さを指定します。 これ以外の場合、結果の長さは 10 となります。
LOCAL は、SQLステートメントを実行する Db2 サブシステムにおけるローカルフォーマットを示します。 もし LOCAL フォーマットに使用される場合、日付終了ルーチンは、その Db2 サブシステムにインストールする必要があります。
2 番目の引数を指定し、それが無効な値である場合、エラーが発生します。
- 時刻
- 結果は、その時刻を 2 番目の引数で指定した形式で文字ストリング表示した
ものとなります。 2 番目の引数を省略した場合、形式は、TIME プリコンパイラー・オプション
があればこれによって、なければインストール・パネル DSNTIP4 のフィールド TIME FORMAT に
よって指定されます。 フォーマットが LOCAL、インストールパネルの「LOCAL TIME LENGTH」フィールド( DSNTIP4 )で結果の長さを指定します。 これ以外の場合、結果の長さは 8 となります。
LOCAL は、SQLステートメントを実行する Db2 サブシステムにおけるローカルフォーマットを示します。 もし LOCAL フォーマットに使用される場合、 Db2 サブシステムにタイム終了ルーチンをインストールする必要があります。
2 番目の引数を指定し、それが無効な値である場合、エラーが発生します。
- タイム・ゾーンなしのタイム・スタンプ
- 結果は、タイム・スタンプの文字ストリング表記になります。 datetime-expression が TIMESTAMP(0) 値である場合、結果の長さは 19 になります。 datetime-expression が TIMESTAMP(integer) 値である場合、結果の長さは 20+integer になります。 これ以外の場合、結果の長さは 26 となります。 2 番目の引数を指定してはいけません。
- Timestamp with time zone
- 結果は、タイム・ゾーン付きのタイム・スタンプの文字ストリング表現になります。そのフォーマットは yyyy-mm-dd-hh.mm.ss.nnnnnn±th:tm で、そのタイム・スタンプの精度に適した数の 'n' 文字が使用されます。 datetime-expression が TIMESTAMP(0) WITH TIME ZONE である場合、結果の長さは 147 になります。 datetime-expression が TIMESTAMP(integer) WITH TIME ZONE である場合、結果の長さは 148+integer になります。 2 番目の引数を指定してはいけません。
結果の CCSID は、関数が呼び出されるコンテキストによって決まります。 詳細については、 文字列のエンコード・スキームとCCSIDルールを参照のこと。
- ISO, EUR, USA、 JIS、または LOCAL
- 結果の文字ストリングの日付形式または時刻フォーマットを指定します。 詳細は、「datetime 値の文字列表現 」を参照してください。
- 行 ID から文字
- 行ID式
- 組み込み行 ID データ・タイプの値を戻す式。
結果は引数の固定長文字ストリング表示です。 結果はビット・データです。
結果の長さは 40 です。 row-ID-expression の長さが 40 より少ない場合、結果は 40 の長さになるまで右側に 16 進のゼロが埋め込まれます。
注
- 代替構文:
- CHAR9 は、最初の引数が 10 進データの場合を除き、CHAR の代わりに指定できます。 CHAR9 を参照してください。
例
- 例 1:
- HIREDATEは、サンプルテーブル DSN8C10.EMP のDATE列です。 それが 1976 年 12 月 15 日の日付を表す (従業員 140 の) 場合、以下の例は、文字ストリング変数 DATESTRING にストリング値 '12/15/1976' を戻します。
EXEC SQL SELECT CHAR(HIREDATE, USA) INTO :DATESTRING FROM DSN8C10.EMP WHERE EMPNO = '000140'; - 例 2:
- ホスト変数 HOUR のデータ・タイプは DECIMAL(6,0) で、値 50000 が含まれます。 この値を時刻期間として解釈すると、5 時間になります。 STARTING が、ある表の TIME 列であるものとします。 そこで、STARTING が真夜中から 17 時間 30 分 12 秒後を表す場合、以下の例は、値 '10:30 PM' を戻します。
CHAR(STARTING+:HOURS, USA) - 例 3:
- RECEIVED が表 TABLEY の TIMESTAMP 列として定義されているとします。 RECEIVED の日付部分の値が 1997 年 3 月 10 日を表し、時刻部分が午前 6 時 15 秒を表している場合、以下の例は、ストリング値 '1997-03-10-06.00.15.000000' を戻します。
SELECT CHAR(RECEIVED) FROM TABLEY WHERE INTCOL = 1234; - 例 4:
- サンプルテーブル DSN8C10.EMP に対して、以下のSQLステートメントは、CHAR(33)として定義されたホスト変数 AVERAGEを、従業員の平均給与の文字列表現に設定します。
EXEC SQL SELECT CHAR(AVG(SALARY)) INTO :AVERAGE FROM DSN8C10.EMP;DEC31 を使うと、AVG を 10 進数に適用した結果は精度が 31 桁 の 10 進数になります。 このような大きな 10 進変数を定義できるホスト言語は、Assembler と C だけです。 このような大きな 10 進数をサポートしないホスト言語の場合は、この例に示す方法を使用してください。
- 例 5:
- サンプルテーブル DSN8C10.EMP の行について、VARCHAR(15)として定義されているLASTNAME列の値を固定長文字列として返します。また、結果の長さを10文字に制限します。
10 文字を超える (末尾ブランクを除いて) 長さの LASTNAME を持つ行に関しては、 値が切り捨てられたことを示す警告が戻されます。SELECT CHAR(LASTNAME,10) FROM DSN8C10.EMP; - 例 6:
- FIRSTNAME は、Unicode 表 T1 の VARCHAR(12) 列です。 その値の 1 つが 6 文字ストリング「Jürgen」です。 FIRSTNAME が「関数」の下に示された値を持っている場合、結果は「戻される値」の下に表示されます。
Function ... Returns ... ----------------------------------------------------------------------------------- CHAR(FIRSTNAME,3,CODEUNITS32) 'Jür ' -- x'4AC3BC722020202020202020' CHAR(FIRSTNAME,3,CODEUNITS16) 'Jür ' -- x'4AC3BC722020202020' CHAR(FIRSTNAME,3,OCTETS) 'Jü' -- x'4AC3BC' - 例 7
- サンプルテーブル DSN8C10.EMP の行について、SMALLINTとして定義されているEDLEVEL列の値を固定長文字列として返します。
EDLEVEL の値 18 は、CHAR(6) 値「18 」(18 の後に 4 つのブランク) として戻されます。SELECT CHAR(EDLEVEL) FROM DSN8C10.EMP; - 例 8:
- サンプルテーブル DSN8C10.EMP では、SALARY列はDECIMAL(9,2)として定義されています。 給与が 52750.00 である従業員を対象に、雇用日付と給与を戻します。給与の小数点文字としてコンマを使用します (52750,00)。
給与は、ストリング値「52750,00」として戻されます。SELECT HIREDATE, CHAR(SALARY, ',') FROM DSN8C10.EMP WHERE SALARY = 52750.00; - 例 9:
- 例 8 のシナリオを繰り返します。ただし、60000.00 から SALARY 列を減算し、デフォルトの小数点文字で給与を戻します。
給与は、ストリング値「7250.00」として戻されます。SELECT HIREDATE, CHAR (60000.00 - SALARY) FROM DSN8C10.EMP WHERE SALARY = 52750.00; - 例 10:
- ホスト変数 SEASONS_TICKETS が INTEGER として定義され、値が 10000 であるとします。 DECIMAL 関数と CHAR 関数を使用して、値を文字ストリング「 10000.00」に変更します。
SELECT CHAR(DECIMAL(:SEASONS_TICKETS,7,2)) FROM SYSIBM.SYSDUMMY1; - 例 11:
- 表 T1 の列 COL1 と COL2 の両方が REAL として定義されており、T1 に 2 つの列の値 7.1E+1 と 7.2E+2 を持つ単一行が含まれているとします。 2 つの列を追加して、結果を文字ストリングとして表します。
結果の文字値は '1.43E2 ' です。SELECT CHAR(COL1 + COL2) FROM T1;
