TO_CHAR 関数は、日付 (DATE) 型値、日時 (DATETIME) 型値、または数値に評価される式を、文字列に変換します。
戻される文字列は、2 番目の引数で format_string に定義されたフォーマット マスク (特殊なフォーマット記号およびリテラル文字を使用可能) を使用して、最初の引数で指定された日付値を表します。
- この関数の最初の引数は、日付 (DATE) 型、日時 (DATETIME) 型、または組込み数値型であるか、あるいはこれらのデータ型のいずれかに変換できる文字列である必要があります。最初の日付 (DATE) 型引数、日時 (DATETIME) 型引数、または数値引数の値が NULL である場合は、NULL 値が戻ります。
- この関数の 2 番目の引数は、フォーマット マスクを指定する文字列です。フォーマット マスクに適した特殊文字のセットは、主として、TO_CHAR 関数の最初の引数が時刻を表すか、数値を表すかに応じて決まります。
日付 (DATE) 型式と日時 (DATETIME) 型式のフォーマット設定
format_string 引数は、TO_CHAR 関数の最初の引数の値と同じ時間単位を暗黙指定する必要はありません。format_string で暗黙的に指定された精度が、最初の引数の日時 (DATETIME) 型修飾子と異なる場合、TO_CHAR 関数により、EXTEND 関数が呼び出された場合と同様に、日時 (DATETIME) 型値が拡張されます。
次の例では、
tab1 表の
begin_date
列を文字列に変換します。
begin_date
列は、DATETIME YEAR TO SECOND 型として定義されています。ユーザは SELECT 文で
TO_CHAR 関数を使用して、この変換を実行します。
SELECT TO_CHAR(begin_date, '%A %B %d, %Y %R') FROM tab1;
この例における format_string の記号の意味は次のとおりです。
- 記号
- 意味
- %A
- ロケールに定義されている平日の完全な名前
- %B
- ロケールに定義されている月の完全な名前
- %d
- 整数としての日付 (01 から 31)。
1 桁の値の前にはゼロ (0) を付けます。
- %Y
- 年を表す 4 桁の 10 進数
- %R
- 24 時間表記の時刻 (以下で定義された %H:%M フォーマットと同等)。
上記の例で、%d フォーマット指定の直後にあるカンマ ( , ) は、TO_CHAR 関数の引数の分離記号ではなく、リテラル文字であることに注意してください。
2 番目の引数は、引用符付き文字列 '%A %B %d, %Y %R' であり、これは TO_CHAR の戻り値で最初の引数を表すためのフォーマット マスクを定義したものです。
この
format_string を
begin_date 列値に適用すると、次の結果が戻されます。
Wednesday July 25, 2007 18:45
次の例の問合せは、
TO_CHAR を呼び出して、同じフォーマット文字列を
ADD_MONTHS 式に適用し、問合せの結果を示します。
SELECT ship_date, TO_CHAR(ADD_MONTHS(ship_date, 1), '%A %B %d, %Y')
AS survey_date FROM orders;
ship_date 03/12/2007
survey_date Thursday April 12, 2007
上記の問合せの出力について説明します。
- ship_date の値は、DB_DATE 環境変数の設定にしたがってフォーマット設定されます。
- survey_date の値は、TO_CHAR 関数の '%A %B %d, %Y %R' フォーマット文字列引数に応じてフォーマット設定されます。
DATE 値または DATETIME 値の場合に TO_CHAR 関数の format_string 引数で有効なその他の記号として、以下のものがあります。
- 記号
- 意味
- %a
- ロケールに定義されている、平日の省略名
- %b
- ロケールに定義されている、月の省略名
- %C
- 整数 (00 から 99) で表す世紀の数値 (年を 100 で除算し、整数に切り捨て)
- %D
- %m/%d/%y フォーマットと同じ
- %e
- 数値としての日付 (1 から 31)。
1 桁の値の前には空白を付けます。
- %h
- %b フォーマットと同じ。ロケールに定義されている、月の省略名
- %H
- 2 桁の整数 (00 から 23) としての時間 (24 時間クロック)
- %I
- 2 桁の整数 (00 から 11) としての時間 (12 時間クロック)
- %m
- 整数としての月 (01 から 12)。
1 桁の値の前にはゼロ (0) を付けます。
- %M
- 2 桁の整数としての分 (00 から 59)
- %S
- 2 桁の整数としての秒 (00 から 61)。秒の値には、特別な場合のためのうるう秒および 2 倍のうるう秒に
対応するために、(59 ではなく) 61 まで使用できます。
- %T
- %H:%M:%S フォーマットの時刻
- %w
- 数値としての曜日 (0 から 6)。0 は、ロケールでの、日曜日に相当する曜日を表します。
- %y
- 年を表す 2 桁の 10 進数。
日時 (DATETIME) 型または日付 (DATE) 型の式が最初の引数であるときに format_string 引数を指定しないと、TO_CHAR 関数によって、デフォルトとして DBTIME または DBDATE 環境変数の設定が使用されて、最初の引数で表される値がフォーマット設定されます。デフォルトでないロケールでは、日時 (DATETIME) 型または日付 (DATE) 型の値のデフォルト フォーマットは、GL_DATETIME や GL_DATE などの環境変数で指定されます。日付 (DATE) 型および日時 (DATETIME) 型のフォーマット記号とその意味の詳細なリストについては、「IBM Informix GLS ユーザーズ ガイド」の GL_DATE および GL_DATETIME 環境変数を参照してください。
組込み時刻データ型の表示およびデータ入力フォーマットを指定できる各 Informix® 環境変数の優先順位について詳しくは、日付 (DATE) 型フォーマットおよび日時 (DATETIME) 型フォーマットの指定の優先順位のトピックを参照してください。
数値および金額 (MONEY) 型の式のフォーマット設定
TO_CHAR 関数の format_string 引数は、rfmtdec( )、rfmtdouble( )、および rfmtlong( ) のような ESQL 関数に使用されるのと同じ数値フォーマット マスクをサポートします。数値の Informix 数値フォーマット マスク (数値式を文字列としてフォーマット設定するとき) の詳細な説明については、「IBM Informix ESQL/C プログラマーズ マニュアル」を参照してください。以下に、数値フォーマット マスクについて簡単にまとめます。
数値フォーマット マスクは、数値式を文字列としてフォーマット設定するときに一部の数値に適用するフォーマットを指定します。このマスクは、次のフォーマット文字の組み合せです。
- 記号
- 意味
- *
- この文字は、表示フィールドの空白になる位置にアスタリスクを充てんします。
- &
- この文字は、表示フィールドの空白になる位置にゼロを充てんします。
- #
- この文字は、先行ゼロを空白に変更します。フィールドの最大左方エクステントを指定するには、この文字を使用します。
- <
- この文字は、表示フィールドで数値を左揃えにします。先行ゼロを NULL 文字列に変更します。
- ,
- この文字は、値の整数部の 3 桁 (小数点から左方にカウントする) のグループを区切る記号を示します。デフォルトでは、この記号はカンマです。
この記号は、DBMONEY 環境変数で設定できます。フォーマット済み数値では、この記号は値の整数部が 4 桁以上である場合にのみ、表示されます。
- .
- この文字は、金額 (MONEY) 型値の整数部を小数部と区切る記号を示します。デフォルトでは、この記号はピリオドです。この記号は、DBMONEY 環境変数で設定できます。フォーマット文字列ではピリオドは 1 つしか使用できません。
- -
- この文字はリテラルです。expr1 がゼロ未満であるときに、負符号として表示されます。行内で複数の負 (-) 符号をグループ化すると、単一の負符号が、占有可能な右端の位置まで浮動します。これは、数値とその通貨記号に干渉しません。
- +
- この文字はリテラルです。expr1 がゼロ以上であるときには正符号として、expr1 がゼロ未満であるときには負符号として表示されます。行内で複数の正符号をグループ化すると、単一の正符号または負符号が、占有可能な右端の位置まで浮動します。これは、数値とその通貨記号に干渉しません。
- (
- この文字はリテラルです。負の数値の左側に左括弧 (() として表示されます。負の数値の負符号を置き換えるアカウンティング括弧の対の 1 つです。行内で複数をグループ化すると、単一の左括弧が、占有可能な右端の位置まで浮動します。これは、数値とその通貨記号に干渉しません。
- )
- これは、負の値の負符号を置き換えるアカウンティング括弧の対の 1 つです。
- $
- この文字は、数値の前に付く通貨記号を表示します。デフォルト ロケールでは、通貨記号はドル記号 ($) です。DBMONEY 環境変数を使用して、デフォルト以外の通貨記号を設定できます。行内で複数のドル記号をグループ化すると、単一の通貨記号が、占有可能な右端の位置まで浮動します。これは、数値に干渉しません。
フォーマット マスクのその他の文字は、TO_CHAR 関数が戻すフォーマット済みの値で、リテラルとして再現します。
次の 3 つの例では、TO_CHAR 関数の d_int 列式引数の値は -12344455 です。
この問合せは、
TO_CHAR の呼出しでフォーマット マスクを指定していません。
SELECT TO_CHAR(d_int) FROM tab_numbers;
次の表は、この SELECT 文の出力を示しています。
次の問合せは、通貨フォーマット マスクを指定します。
SELECT TO_CHAR(d_int, "$*********.**") FROM tab_numbers;
次の表は、この SELECT 文の出力を示しています。
(expression) |
$12344455.00 |
SELECT TO_CHAR(d_int, "-$*********.**") FROM tab_numbers;
この問合せは
- $12344455.00 を戻します。
SELECT TO_CHAR(12344455,"-$*********.**") FROM tab_numbers;
次の表は、この SELECT 文の出力を示しています。
フォーマット マスク引数から通貨 ( $ ) 記号が適用されますが、最初の引数の値はゼロより大きいので、負符号 ( - ) に効果はありません。
TO_CHAR 関数は、最初の引数が日付 (DATE) 型または日時 (DATETIME) 型の式であるとき、または日付 (DATE) 型または日時 (DATETIME) 型の式としてフォーマット設定できる文字列である場合に限り、時間式になることに注意してください。一方、数値または通貨の値が最初の引数である場合は、TO_CHAR は、その引数の値の表記を文字列として戻しますが、時間式は戻しません。