日付や値数を文字列へ変換する汎用 SQL 文字列関数です。
Synopsis
TO_CHAR(tochar-expression[,format])

TOCHAR(tochar-expression[,format])
引数
tochar-expression 変換される論理日付や数式。
format オプションtochar-expression 変換に対する形式を指定する、日付や数の形式。format が "Y"、"MM"、"RR" や "DD" などの文字を含んでいる場合、tochar-expression が日付の値と仮定されます。その他の場合は、数値とみなされます。
概要
TO_CHARTOCHAR は互換性があり、Oracle 互換性のためにサポートされています。
TO_CHAR 関数には、以下の 2 つの使用法があります。
TO_CHAR は、日付を文字列に変換します。TO_DATE は、文字列を日付に変換します。あるデータ型の日付を別のデータ型の日付に変換するには、CONVERT 関数を使用します。
以下のメソッド・コールを使用することで、Caché ObjectScript からこの関数を呼び出すこともできます。
$SYSTEM.SQL.TOCHAR(tochar-expression,format)
メモ :以下に記述されている形式コード定義のロケールは、Caché ObjectScript の $ZDATE と $ZDATEH 文書に記述されているロケールと同じです。
Date-to-String 変換
TO_CHAR の使用では、まず日付式を文字列に変換します。tochar-expression に対する値は、有効な論理日付でなければなりません。
形式文字列で使用されている、形式コードではない文字列はすべて、結果文字列のその位置にそのまま戻されます。
以下のテーブルは、TO_CHAR のこのバージョンでの format パラメータに対する有効な形式コードを示しています。
形式コード 意味
D 曜日 (1-7、1 は日曜日を指す)
DD 2 桁の日付 (01-31)
DY 現在のロケールの WeekdayAbbr プロパティによって指定される、曜日の略名。既定は、Sun Mon Tue Wed Thu Fri Sat です。
DAY 現在のロケールの WeekdayName プロパティが指定する曜日名。既定は、Sunday Monday Tuesday Wednesday Thursday Friday Saturday です。
MM 2 桁の月数 (01-12、01 = 1 月)
MON 現在のロケールの MonthAbbr プロパティによって指定される月の略名。既定は、Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec です。
MONTH 現在のロケールの MonthName プロパティによって指定される正式な月名。既定は、January February March April May June July August September October November December です。
YYYY 4 桁の年数
YYY 下 3 桁の年数
YY 下 2 桁の年数。
Y 下 1 桁の年数
RR 下 2 桁の年数。
J ユリウス日 (紀元前 (BCE) 4713 年 1 月 1 日からの日数)。ユリウス日の形式は、常に DD MON YYYY を返します。
ユリウス日
“ユリウス” 日の形式は、1840 年より前 (および 9999 年より後) の日付の表示を可能にするために提供されています。
文字 'J' を含む文字列で構成される format を指定する場合、返される日付は、紀元前 (BCE) 4713 年 1 月 1 日からカウントされた “ユリウス” 日になります。文字 'J' のみが、この format 文字列内で指定できます。その他すべての文字を取り込むと、文字 'J' がリテラルとして処理され、日付は標準の日付として変換されます。
ユリウス日は、既定形式 DD MON YYYY で表示し、BCE (西暦紀元前) の日付に対して接尾語の文字 'BC' を追加します。現在により近い (CE または AD) 日付には接尾辞を付けません。
ユリウス日には、最大 date-expression 値はありません。
以下の例は、29 May 4550BC を返します。
SELECT DISTINCT TO_CHAR(59684,'J') AS Julian_Date
FROM Sample.Person
以下の例は、09 May 2005 を返します。
SELECT DISTINCT TO_CHAR(2453500,'J') AS Julian_Date
FROM Sample.Person
Date-to-String の例
以下の例は、日付整数を受け取り、フォーマット文字列引数に従ってフォーマットされた日付文字列を返します。
SELECT DISTINCT TO_CHAR(59684,'MM/DD/YYYY')
FROM Sample.Person
文字列 05/29/2004 を返します。
以下の例は、日付整数を受け取り、フォーマットされた日付文字列を返します。形式文字ではない文字が、リテラルとして出力文字列に渡されます。
SELECT DISTINCT TO_CHAR(59684,'That date is MM/DD/YYYY')
FROM Sample.Person
文字列 That date is 05/29/2004 を返します。
以下の例は、日付整数を受け取り、フォーマットされた日付文字列を返します。
SELECT DISTINCT TO_CHAR(59684,'DAY MONTH DD, YYYY')
FROM Sample.Person
文字列 Saturday May 29, 2004 を返します。
TO_CHAR と TO_DATE
以下の例は、TO_CHAR 関数と TO_DATE 関数を比較させています。
最初の例は、TO_DATE を使用して、2 つのタイプの日付変換を示しています。最初の TO_DATE は、日付文字列を受け取り、対応する日付整数 (59832) を返します ($ZDATE 関数がこの日付整数をフォーマットされた日付 10/24/2004 と表示するために使用されます)。2 番目の TO_DATE は、日付整数を受け取り、対応するフォーマットされた日付文字列 (2004–10–24) を返します。
   &sql(SELECT TO_DATE('2004-10-24','YYYY-MM-DD')
        INTO :a
        FROM Sample.Person)
   &sql(SELECT TO_DATE('59832','YYYY-MM-DD')
        INTO :b
        FROM Sample.Person)
   WRITE !,a
   WRITE !,$ZDATE(a)
   WRITE !,b
対照的に、以下の例は、TO_CHAR を使用して、並列する日付変換を示しています。最初の TO_CHAR は、予想どおりに、日付整数を対応するフォーマットされた日付文字列に変換します。しかし、2 番目の TO_CHAR は、予期しない結果を生じます。TO_CHAR は数値入力を予期しているため、入力された日付区切り文字をマイナス符号として扱い、減算を実行します。したがって、その日付整数 1970 (2004 minus 10 minus 24) つまり 1846–5–24 に対応する日付をフォーマットします。明らかに、これはプログラマの意図ではありません。
   &sql(SELECT TO_CHAR(59832,'YYYY-MM-DD')
        INTO :a
        FROM Sample.Person)
   &sql(SELECT TO_CHAR(2004-10-24,'YYYY-MM-DD')
        INTO :b
        FROM Sample.Person)
   WRITE !,a
   WRITE !,b
Number-to-String 変換
次に、TO_CHAR を使用して数字を文字列に変換します。
以下のテーブルは、TO_CHAR のこのバージョンでの format パラメータに対する有効な形式コードを示しています。
形式コード 説明
9 9999 指定した桁数の値と共に、値が正の場合は先頭にスペースを、負の場合は先頭にマイナスを返します。固定小数点の整数部にゼロを戻すゼロ値を除いては、先頭のゼロは空白になります。
0 09999990 先行するゼロを付けて戻します。後のゼロを付けて戻します。
$ $9999 先頭に $ を付けて値を返します
B B9999 整数部がゼロの場合 (形式モデルで 0 の値とは関係なく)、固定小数点の整数部に空白を返します。
S
S9999 
9999S
先頭にマイナス記号 "-" を付けて負の値を返します。先頭にプラス “+” を付けて正の値を戻します。
末尾にマイナス “-” を付けて負の値を返します。末尾にプラス符号 "+" を付けて正の値を返します。
D 99D99 指定した位置に 10 進小数点 (ピリオド ".") を返します。format パラメータ内には、"D" は 1 つしか許可されません。
G 9G999 指定された位置でグループ・セパレータを返します。使用されるグループ・セパレータは、既定のロケールで定義されたものと同じです。既定は "," です。10 進法の右側にグループ・セパレータが表れることはありません。
FM FM90.9 先頭や末尾に空白がない値を返します
, 9,999 指定された位置にコンマを付けて返します。10 進法の右側にコンマが表れることはありません。形式モデルをコンマで始めることはできません。
. 99.99 指定した位置に 10 進小数点 (ピリオド “.”) を返します。format パラメータ内には、"." は 1 つしか許可されません。
Number-to-String の例
SELECT DISTINCT TO_CHAR(1000,'9999')
FROM Sample.Person
文字列 ' 1000' を返します。
SELECT DISTINCT TO_CHAR(1000,'9,999')
FROM Sample.Person
文字列 ' 1,000' を返します。
SELECT DISTINCT TO_CHAR(10,'99.99')
FROM Sample.Person
文字列 ' 10.00' を返します。
SELECT DISTINCT TO_CHAR(-10,'99.99')
FROM Sample.Person
文字列 '–10.00' を返します。
SELECT DISTINCT TO_CHAR(-10,'99.99S')
FROM Sample.Person
文字列 '10.00–' を返します。
SELECT DISTINCT TO_CHAR(10,'99D99S')
FROM Sample.Person
文字列 ' 10.00+' を返します。
SELECT DISTINCT TO_CHAR(1234567890,'9G999G999G999')
FROM Sample.Person
文字列 ' 1,234,567,890' を返します。
SELECT DISTINCT TO_CHAR(1234567890,'FM9G999G999G999')
FROM Sample.Person
文字列 '1,234,567,890' を返します。
SELECT DISTINCT TO_CHAR(1234567890,'$9G999G999G999S')
FROM Sample.Person
文字列 '$ 1,234,567,890+' を返します。
関連項目