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

TOCHAR(tochar-expression[,format])
引数
tochar-expression 変換される論理日付、時刻、または数式。
format オプションtochar-expression 変換用に日付、時刻、または数の形式を指定する文字コード。
概要
TO_CHARTOCHAR は互換性があり、Oracle 互換性のためにサポートされています。
TO_CHAR 関数には、以下の 3 つの使用法があります。
TO_CHAR は、日付または時刻を文字列に変換します。TO_DATE は、文字列を日付または時刻に変換します。あるデータ型の日付を別のデータ型の日付に変換するには、CONVERT 関数を使用します。
以下のメソッド・コールを使用することで、Caché ObjectScript からこの関数を呼び出すこともできます。
$SYSTEM.SQL.TOCHAR(tochar-expression,format)
以下に記述されている format のコード定義のロケールは、Caché ObjectScript の $ZDATE$ZDATEH ドキュメントに記述されているロケールと同じです。
Date-to-String 変換
TO_CHAR の使用では、まず日付式を文字列に変換します。tochar-expression に対する値は、有効な論理日付でなければなりません。
format 文字列で使用されている、形式コードでない文字列はすべて、結果文字列のその位置にそのまま戻されます。
以下の表は、このバージョンの 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
Time-to-String 変換
TO_CHAR を使用して、時刻式を文字列に変換できます。tochar-expression の値は、有効な論理時刻の値でなければなりません。
format 文字列で使用されている、形式コードでない文字列はすべて、結果文字列のその位置にそのまま戻されます。
以下の表は、このバージョンの TO_CHAR で時刻を変換するときの有効な時刻の format パラメータ・コードを示しています。
形式コード 意味
HH 時間 (1 ~ 12)
HH12 時間 (1 ~ 12)
HH24 時間 (0 ~ 23)
MI 分 (0 ~ 59)
SS 秒 (0 ~ 59)
SSSSS 午前 0 時 00 分からの秒数 (0 ~ 86388)
AM 午前
PM 午後
日付・時刻の変換例
以下の例は、日付整数を受け取り、format 文字列引数に従ってフォーマットされた日付文字列を返します。
SELECT DISTINCT TO_CHAR(59684,'MM/DD/YYYY')
FROM Sample.Person
文字列 05/29/2004 を返します。
以下の例は、時刻整数を受け取り、format 文字列引数に従ってフォーマットされた時刻文字列を返します。
SELECT TOP 1 TO_CHAR(TO_DATE(30000),'HH:MI:SS')
FROM Sample.Person
文字列 10:07:22 を返します。
以下の例は、日付整数を受け取り、フォーマットされた日付文字列を返します。format 文字でない文字が、リテラルとして出力文字列に渡されます。
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
以下の埋め込み SQL の例は、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'),
          TO_DATE('59832','YYYY-MM-DD')
        INTO :a,:b
        FROM Sample.Person)
   IF SQLCODE'=0 {
     WRITE !,"Error code ",SQLCODE }
   ELSE {
     WRITE !,a
     WRITE !,$ZDATE(a)
     WRITE !,b }
対照的に、以下の例は、TO_CHAR を使用して、並列する日付変換を示しています。最初の TO_CHAR は、予想どおりに、日付整数を対応するフォーマットされた日付文字列に変換します。しかし、2 番目の TO_CHAR は、予期しない結果を生じます。TO_CHAR は数値入力を予期しているため、入力された日付区切り文字をマイナス記号として扱い、減算を実行します。したがって、その日付整数 1970 (2004 引く 10 引く 24) つまり 1846–5–24 に対応する日付をフォーマットします。明らかに、これはプログラマの意図した結果ではありません。
   &sql(SELECT 
        TO_CHAR(59832,'YYYY-MM-DD'),
        TO_CHAR(2004-10-24,'YYYY-MM-DD')
        INTO :a,:b
        FROM Sample.Person)
   IF SQLCODE'=0 {
     WRITE !,"Error code ",SQLCODE }
   ELSE {
     WRITE !,a
     WRITE !,b }
Number-to-String 変換
次に、TO_CHAR を使用して数字を文字列に変換します。以下の表は、このバージョンの TO_CHAR で数字を変換するときの format パラメータでの有効な形式コードを示しています。
format パラメータを省略すると、入力数値は整数として評価されます。先頭の 0 および先頭のプラス記号は削除され、先頭のマイナス記号は保持されて、数字でない文字 (コンマやピリオドなど) が初めて現れた箇所で切り捨てられます。先頭の空白やその他の形式は入りません。
形式コード 説明
9 9999 指定した桁数で値を返します。値が正の場合は先頭にスペースが付きます。負の場合は先頭にマイナス記号が付きます。固定小数点の整数部にゼロを戻すゼロ値を除いては、先頭のゼロは空白になります。
0
09999 
99990
先行するゼロを付けて戻します。
後のゼロを付けて戻します。
$ $9999 先頭に $ を付けて値を返します。ドル記号の前には、正の数を表す空白が入ります。
B B9999 整数部がゼロの場合、(format パラメータの 0 の有無にかかわらず) 固定小数点の整数部に空白を返します。
S
S9999 
9999S
先頭にマイナス記号 "-" を付けて負の値を返します。先頭にプラス記号 "+" を付けて正の値を返します。
末尾にマイナス "-" を付けて負の値を返します。末尾にプラス記号 "+" を付けて正の値を返します。
D 99D99 指定された位置に小数点区切り文字を配置して返します。使用される小数点区切りは、ロケールで定義されたものと同じです。既定はピリオド "." です。format パラメータ内には、"D" は 1 つしか許可されません。
G 9G999 指定された位置にグループ・セパレータを配置して返します。使用されるグループ・セパレータは、ロケールで定義されたものと同じです。既定はコンマ "," です。10 進法の右側にグループ・セパレータが表れることはありません。
FM FM90.9 先頭や末尾に空白がない値を返します。
, 9,999 指定された位置にコンマを付けて返します。10 進法の右側にコンマが表れることはありません。format パラメータをコンマで始めることはできません。
. 99.99 指定した位置に 10 進小数点 (ピリオド ".") を返します。format パラメータ内には、"." は 1 つしか許可されません。
format パラメータが入力数値式より整数桁数が小さい場合、TO_CHAR は数値を返さずに、複数のシャープ記号 (##) の文字列を返します。シャープ記号の数は、現在の format パラメータの長さに 1 を加えたものです。
format パラメータが入力数値式より小数桁数が小さい場合、TO_CHAR は指定された桁数に数値を丸めるか、小数形式でない場合は整数に丸めます。
Number-to-String の例
次の埋め込み SQL の例では、数値から文字列への基本的な変換を示します。
   &sql(SELECT 
     TO_CHAR(1000,'9999'),
     TO_CHAR(10,'9999')
   INTO :numfull,:numshort
   FROM Sample.Person)
   IF SQLCODE'=0 {
     WRITE !,"Error code ",SQLCODE }
   ELSE {
     WRITE !,"Formatted number:",numfull
     WRITE !,"Formatted number:",numshort
     WRITE !,"Note leading blanks" }
これは、指定された数値の先頭に適切な個数の空白を付けて返します。符号なしの正の数の前には、必ず空白文字が入ります。指定された数値が format パラメータより桁数が小さい場合は、先頭の空白はさらに追加されます。
以下の埋め込み SQL は、区切り文字の使用例を示します。
   &sql(SELECT 
      TO_CHAR(1000,'9,999.99'),
      TO_CHAR(1000,'9G999D99')
   INTO :comma,:groupsep
   FROM Sample.Person)
   IF SQLCODE'=0 {
     WRITE !,"Error code ",SQLCODE }
   ELSE {
     WRITE !,"Formatted number:",comma
     WRITE !,"Formatted number:",groupsep
     WRITE !,"Note leading blank" }
最初の TO_CHAR は、文字列 ' 1,000.00' を返します。2 番目の TO_CHAR もこの値を返しますが、区切り文字はロケールの設定により表示が異なります。
以下の埋め込み SQL は、プラス記号とマイナス記号の使用例を示します。
   &sql(SELECT 
      TO_CHAR(10,'99.99'),
      TO_CHAR(-10,'99.99'),
      TO_CHAR(10,'S99.99'),
      TO_CHAR(-10,'S99.99'),
      TO_CHAR(10,'99.99S'),
      TO_CHAR(-10,'99.99S')
   INTO :pos,:neg,:poslead,:neglead,:postrail,:negtrail
   FROM Sample.Person)
   IF SQLCODE'=0 {
     WRITE !,"Error code ",SQLCODE }
   ELSE {
     WRITE !,"Formatted number:",pos
     WRITE !,"Formatted number:",neg
     WRITE !,"Formatted number:",poslead
     WRITE !,"Formatted number:",neglead
     WRITE !,"Formatted number:",postrail
     WRITE !,"Formatted number:",negtrail
     WRITE !,"Note use of leading blank" }
先頭の空白は、符号の形式がない場合に正の数の前にのみ表示されます。先頭の空白は、符号の配置にかかわらず、負の数の前、または符号付きの数値の前には表示されません。
以下の埋め込み SQL は、"FM" 形式の使用例を示します。これは、符号なしの正の数に対し、既定の先頭の空白をオーバーライドします。
   &sql(SELECT 
      TO_CHAR(12345678.90,'99G999G999D99'),
      TO_CHAR(12345678.90,'FM99G999G999D99')
   INTO :num,:fmnum
   FROM Sample.Person)
   IF SQLCODE'=0 {
     WRITE !,"Error code ",SQLCODE }
   ELSE {
     WRITE !,"Formatted number:",num
     WRITE !,"Formatted number:",fmnum
     WRITE !,"Note leading blank" }
最初の TO_CHAR は、文字列 ' 12,345,678.90' を返します。2 番目の TO_CHAR は、文字列 '12,345,678.90' を返します (先頭に空白はありません)。
以下の埋め込み SQL は、先頭のドル記号の使用例を示します。
   &sql(SELECT 
     TO_CHAR(1234567890,'$9G999G999G999'),
     TO_CHAR(1234567890,'S$9G999G999G999'),
     TO_CHAR(12345678.90,'$99G999G999D99')
   INTO :d,:sd,:dD
   FROM Sample.Person)
   IF SQLCODE'=0 {
     WRITE !,"Error code ",SQLCODE }
   ELSE {
     WRITE !,"Formatted number:",d
     WRITE !,"Formatted number:",sd
     WRITE !,"Formatted number:",dD
     WRITE !,"Note leading blanks" }
ドル記号の前には必ず符号または空白文字が入ります。
以下の埋め込み SQL の例は、format パラメータが入力数値より整数桁数が小さい場合の動作を示します。
   &sql(SELECT 
     TO_CHAR(1234567.89,'9'),
     TO_CHAR(1234567.89,'99'),
     TO_CHAR(1234567.89,'99D99')
   INTO :a,:b,:c
   FROM Sample.Person)
   IF SQLCODE'=0 {
     WRITE !,"Error code ",SQLCODE }
   ELSE {
     WRITE !,"Formatted number:",a
     WRITE !,"Formatted number:",b
     WRITE !,"Formatted number:",c }
TO_CHAR は、それぞれ、シャープ記号 "##"、"###"、および "######" を返します。
以下の埋め込み SQL の例は、format パラメータが入力数値式より小数桁数が小さい場合の動作を示します。
   &sql(SELECT 
     TO_CHAR(1234567.4999,'9999999D9'),
     TO_CHAR(1234567.91,'9999999')
   INTO :a,:b
   FROM Sample.Person)
   IF SQLCODE'=0 {
     WRITE !,"Error code ",SQLCODE }
   ELSE {
     WRITE !,"Formatted number:",a
     WRITE !,"Formatted number:",b }
返される数字は、それぞれ、"1234567.5" と "1234568" に丸められます。
関連項目