TO_CHAR
Synopsis
TO_CHAR(tochar-expression[,format]) TOCHAR(tochar-expression[,format])
引数
tochar-expression | 変換の対象とする論理日付、タイムスタンプ、または数式。 |
format | オプション — tochar-expression 変換用に日付、タイムスタンプ、または数の形式を指定する文字コード。省略すると、TO_CHAR は tochar-expression をキャノニック形式の数として返します。 |
概要
TO_CHAR と TOCHAR は互換性があり、Oracle 互換性のためにサポートされています。
TO_CHAR 関数の format には、5 つの使用方法があります。
この関数は、ObjectScript から TOCHAR()Opens in a new tab メソッド呼び出しを使用して呼び出すこともできます。
$SYSTEM.SQL.TOCHAR(tochar-expression,format)
有効な引数と無効な引数
-
tochar-expression がタイムスタンプとして解釈されるには、YYYY-MM-DD HH:MI:SS という形式か、以下のように変形して指定する必要があります。10 未満の月または日の値は、先頭に 0 を入れても入れなくてもかまいません。先頭の 0 を省略すると、返り値でも省略されます。秒の値は省略できますが、その場所を示すコロンは指定する必要があります (HH:MI:)。返り値の秒は、既定で 00 になります。秒の値には小数を含めることができます (HH:MM:SS.nnn)。返される時間ではこれらの小数は切り捨てられます。format に時間の形式を指定しなくても、タイムスタンプには時間の部分を含める必要があります。
-
tochar-expression が正しいタイムスタンプの形式でない場合、TO_CHAR はそれを整数と解釈し、整数でない文字が最初に出現したところで解釈を終了します。format が日付またはタイムスタンプ形式の場合、TO_CHAR は tochar-expression を $HOROLOG 日付整数と解釈します。例えば、2010-03-23 12-15:23 では、時刻の値の部分に誤ってハイフンが使用されていますが、これは $HOROLOG 日付の 2010 (1846-07-03 12:00:00 AM) と解釈されます。
-
tochar-expression の日付または時刻が、有効な日付値または時刻値でない場合、Caché は SQLCODE -400 エラーを発行します。これは、2 月 30 日や 12/31/1840 より前などの存在しない日付を指定したときに発生します。
-
format に無効な日付、時刻、またはタイムスタンプ・コードの要素を指定した場合 (YYYYY、MIN、HH48 など)、TO_CHAR は無効なコード要素の形式コード・リテラルを返します。有効なコードの要素が存在すれば、その日付、時刻、またはタイムスタンプの変換値を返します。
-
TO_CHAR が format コード要素を認識できない場合 (format が空文字列の場合など) や数字の形式における桁数が tochar-expression 値より小さい場合、TO_CHAR はシャープ記号 (#) を返します (これは、tochar-expression が少なくとも 2 桁の整数で始まる場合に当てはまります。それ以外は、TO_CHAR は NULL を返します)。
-
format を省略すると、TO_CHAR は tochar-expression の数値部分をキャノニック形式の数として返します。その際、数値以外の文字が出現すると、それらの文字は切り捨てられます。tochar-expression が数字以外の場合、TO_CHAR は 0 を返します。tochar-expression が NULL の場合、TO_CHAR は NULL を返します。
TO_CHAR と TO_DATE
-
TO_CHAR は、日付整数をフォーマットされた日付文字列に、時刻整数をフォーマットされた時刻文字列に変換します。誤って TO_CHAR にフォーマットされた日付文字列または時刻文字列を指定すると、間違ったデータが返されます。
-
TO_DATE は、フォーマットされた日付文字列を対応する日付整数に変換します。誤って TO_DATE に日付整数を指定すると、この整数が変更せずに返されます。
-
ユリウス日では、この操作は逆になります。
TO_DATE と TO_CHAR の正しい使用法と間違った使用法については、以下の例を参照してください。
以下の埋め込み SQL の例は、TO_DATE を使用して日付変換を実行します。TO_DATE は、日付文字列を受け取り、対応する日付整数 (59832) を返しますフォーマットした日付 10/24/2004 としてこの日付整数を表示するには、$ZDATE 関数を使用します。この例では、TO_DATE にも誤って日付整数を指定しているので、そのままこの整数が返されます。
&sql(SELECT
TO_DATE('2004-10-24','YYYY-MM-DD'), /* correct */
TO_DATE(59832,'YYYY-MM-DD') /* ERROR! */
INTO :a,:b)
IF SQLCODE'=0 {
WRITE !,"Error code ",SQLCODE }
ELSE {
WRITE !,a
WRITE !,$ZDATE(a)
WRITE !,b
}
以下の埋め込み SQL の例は、TO_CHAR を使用した日付変換を示しています。最初の TO_CHAR は、予想どおりに、日付整数を対応するフォーマットされた日付文字列に変換します。しかし、2 番目の TO_CHAR は、予期しない結果を生じます。TO_CHAR は数値入力を予期しているため、入力された日付区切り文字をマイナス記号として扱い、減算を実行します。したがって、その日付整数 1970 (= 2004 - 10 - 24)、つまり 1846-5-24 に対応する日付がフォーマットされます。明らかに、これはプログラムで意図した結果ではありません。
&sql(SELECT
TO_CHAR(59832,'YYYY-MM-DD'), /* correct */
TO_CHAR(2004-10-24,'YYYY-MM-DD') /* ERROR! */
INTO :a,:b)
IF SQLCODE'=0 {
WRITE !,"Error code ",SQLCODE }
ELSE {
WRITE !,a
WRITE !,b }
関連する SQL 関数
-
TO_CHAR は、日付整数、タイムスタンプ、または数を文字列に変換します。
-
TO_DATE は、日付に対して TO_CHAR とは逆の操作を実行し、フォーマットされた日付文字列を日付整数に変換します。
-
TO_TIMESTAMP は、タイムスタンプに対して TO_CHAR とは逆の操作を実行し、フォーマットされた日付/時刻文字列を標準のタイムスタンプに変換します。
-
TO_NUMBER は、数に対して TO_CHAR とは逆の操作を実行し、数値文字列を数に変換します。
-
CAST および CONVERT は、DATE、TIMESTAMP、および NUMBER の各データ型に対して変換を実行します。
Date-to-String 変換
$HOROLOG 形式は、日時を表す Caché SQL 論理形式です。これはコンマで区切られた 2 つの整数からなる文字列です。最初の整数は、1840 年 12 月 31 日以降の日数、2 番目は今日の日付の午前 0 時以降の秒数です。
TO_CHAR を使用して $HOROLOG 日付整数または 2 つのコンマ区切りの整数である $HOROLOG 文字列を、フォーマットされた日付文字列、またはフォーマットされた日時文字列に変換できます。tochar-expression の値は、有効な $HOROLOG 値にする必要があります。
以下の表は、このバージョンの TO_CHAR で日付を変換するときの有効な日付の format コードを示しています。
形式コード | 意味 |
---|---|
D | 曜日 (1-7)。既定では、1 が日曜日 (週の最初の日) ですが、この指定は構成可能です。"DAYOFWEEK" 関数を参照してください。 |
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 桁の年数。 |
RRRR | 4 桁の年数。 |
RR | 下 2 桁の年数。 |
DDD | 年間通算日 (以下を参照)。 |
J | ユリウス日 (紀元前 (BCE) 4712 年 1 月 1 日からの日数)。 |
YYYYMMDD、DDMMYYYY、および YYYYMM の形式文字列を除いて、区切り文字は日付形式要素間で必要です。最後の形式では年と月の値が返され、月の日付は無視されます。
format のコード定義に説明のあるロケールは、ObjectScript の $ZDATE と $ZDATEH のドキュメントに記述されているロケールと同じです。
日付変換の例
以下はすべて、TO_CHAR に $HOROLOG 日付整数または $HOROLOG 文字列値すべてを指定して、フォーマットされた日付文字列または日時文字列を返す有効な用法です。
SELECT TO_CHAR(63012,'YYYY-MM-DD') AS DateFD,
TO_CHAR(63012,'YYYY-MM-DD HH24:MI:SS') AS DateFDT,
TO_CHAR('63012,50278','YYYY-MM-DD') AS DateTimeFD,
TO_CHAR('63012,50278','YYYY-MM-DD HH24:MI:SS') AS DateTimeFDT
以下の例で、各 TO_CHAR は日付整数を取り、format 文字列引数に従ってフォーマットされた日付文字列を返します。
SELECT TO_CHAR(63012,'MM/DD/YYYY'), /* returns 07/09/2013 */
TO_CHAR(63012,'DAY MONTH DD, YYYY') /* returns Tuesday July 09, 2013 */
以下の例は、日付整数を受け取り、フォーマットされた日付文字列を返します。format 文字でない文字が、リテラルとして出力文字列に渡されます。
SELECT TO_CHAR(63012,'The date MM/DD/YYYY should be noted')
これは文字列 The date 07/09/2013 should be noted を返します。
年間通算日
DDD を使用して、日付式を年間通算日 (1 月 1 日から経過した日数) と年に変換します。形式文字列 DDD,YYYY は、$HOROLOG 形式の日付式と組み合わせる必要があります (指定されている場合、$HOROLOG 時刻値は無視されます)。DDD およびYYYY (または YY) 形式要素は任意の順序で指定できます。これらの間の区切り文字は必須で、リテラルとして返されます。以下の例は、この年間通算日の使用法を示しています。
SELECT TO_CHAR('60871','YYYY:DDD')
SELECT TO_CHAR('60871,12345','DDD YY')
TO_CHAR では、日付式に対応する年間通算日を返すことができます。TO_DATE では、年間通算日に対応する日付式を返すことができます。
ユリウス日の変換
“ユリウス“ 日の形式は、1841 年より前の日付を表示可能にするために使用できます。TO_CHAR は、データ型が %Date または %TimeStamp の日付値を、7 桁のユリウス日の整数に変換します。
既定では、%Date データ型は 1840 年 12 月 31 日より前の日付を表しません。ただし、このデータ型の MINIVAL パラメータを再定義すると、それより前の日付を西暦 1 年 1 月 1 日まで、負の整数として表すことができます。この負の整数による日付の表記には、ここで説明する "ユリウス日" の日付形式とは互換性がありません。詳細は、このドキュメントのリファレンスの "データ型" を参照してください。
文字 'J' を含む文字列で構成される format を指定する場合、返される日付値は、紀元前 (BCE) 4712 年 1 月 1 日からの経過日数を示す “ユリウス” 日になります。文字 'J' のみが、この format 文字列内で指定できます。その他すべての文字を取り込むと、文字 'J' がリテラルとして処理され、日付は標準の日付として変換されます。
ユリウス日の最大 tochar-expression 値は '9999-12-31' で、これはユリウス日のカウント 5373484 に相当します。最小値は '-4712-01-01' で、これはユリウス日のカウント 0000001 に相当します。ユリウス日のカウントは常に 7 桁の数で表記され、必要に応じて先頭にゼロが付きます。
以下の例は、2369916 (米国独立宣言の署名) および 1709980 (皇帝アウグストゥスの統治するローマ帝国の誕生を決定づけたアクチウムの海戦) を返します。
SELECT TO_CHAR('1776-07-04','J') AS UnitedStatesStart,
TO_CHAR('-0031-09-02','J') AS RomanEmpireStart
以下の考慮事項は、TO_CHAR および TO_DATE の使用による日付とユリウス日のカウントの相互変換に影響を与えません。ただし、ユリウス日のカウントを使用して行う計算の一部には影響が及ぶ場合もあります。
1721424 (1/1/1) より前のユリウス日のカウントには、Oracle など、他のソフトウェア実装と互換性があります。このカウントは、通常の用法における BCE 日付と同一ではありません。通常の用法では、0 年は存在せず、日付の範囲は 12/31/-1 から 1/1/1 になります。Oracle の用法では、1721058 から 1721423 までのユリウス日は単純に無効となり、エラーが返されます。Caché では、ユリウス日がこの範囲内にあると、存在しない 0 年がプレースホルダとして返されます。したがって、BCE 日付を使用する計算は、1 年調整して通常の用法に対応させる必要があります。
また、これらの日付のカウントでは、グレゴリオ暦の導入 (1582 年 10 月に制定、ただし英国およびその植民地で採用されたのは 1752 年) による日付の変更が考慮されないことに注意してください。
TO_CHAR では、日付式に対応するユリウス日のカウントを返すことができます。TO_DATE では、以下の例のように、ユリウス日のカウントに対応する日付式を返すことができます。
SELECT TO_CHAR('1776-07-04','J') AS JulianCount,
TO_DATE(2369916,'J') AS JulianDate
ユリウス日の使用法の詳細は、TO_DATE 関数を参照してください。
Time-to-String 変換
TO_CHAR を使用して、以下の tochar-expression 時刻値をフォーマットされた時刻文字列に変換できます。
-
$HOROLOG 時刻整数 ($HOROLOG の時刻コンポーネント)。tochar-expression の値は、有効な論理時刻である必要があります (0 ~ 86399 の範囲の整数)。日付および時刻コンポーネントの両方を含む完全な $HOROLOG 値 (62556,42152 など) は指定しないでください。TO_CHAR の時刻変換は $HOROLOG の最初 (日付) のコンポーネントをフォーマットされた時刻文字列に正しく変換できず、2 つ目 (時刻) のコンポーネントを無視します。
-
論理タイムスタンプ値。tochar-expression の値は (文字列データ型ではなく) YYYY-MM-DD hh:mm:ss 形式の %TimeStamp データ型である必要があります。タイムスタンプの日付コンポーネントは無視され、時刻コンポーネントが変換されます。例えば、SYSDATE は論理タイムスタンプです。
-
ODBC 標準時刻形式の時刻値。tochar-expression の値は hh:mm:ss 形式にする必要がありますが、文字列になります。
-
ローカル時刻形式による時刻値 (現在の NLS ロケール設定を使用)。例えば、NLS TimeSeparator が “^” に設定されている場合、tochar-expression の値は hh^mm^ss 形式の文字列になります。
いずれの場合も、format の値は、時刻形式コードのみを格納する文字列である必要があります。
形式コード | 意味 |
---|---|
HH | 時間 (1 ~ 12) |
HH12 | 時間 (1 ~ 12) |
HH24 | 時間 (0 ~ 23) |
MI | 分 (0 ~ 59) |
SS | 秒 (0 ~ 59) |
SSSSS | 午前 0 時 00 分からの秒数 (0 ~ 86388) |
AM と PM | 午前/午後のインジケータ (AM = 午前、PM = 午後)。適切な AM または PM の接尾語が付加された 12 時間形式に時刻値を変換します。返される AM または PM の接尾語は、指定した形式コードからではなく、時刻値から導出されます。format には AM または PM を使用できます。この 2 つは機能的に同じです。 |
これ以外の format コード値が含まれていると、tochar-expression 整数は日付と解釈されます。
以下の例では、'60871' が時刻値 04:54:31 PM と解釈されます。
SELECT TO_CHAR('60871','HH12:MI:SS PM')
以下の例では、2 つの論理タイムスタンプの時刻部分をフォーマットされた時刻文字列に変換します。format は秒の小数部をサポートしていません。tochar-expression の秒の小数部は切り捨てられます。
SELECT TO_CHAR(SYSDATE,'HH12:MI:SS PM'),
TO_CHAR(CURRENT_TIMESTAMP(6),'HH12:MI:SS PM')
以下の埋め込み SQL の例では、ODBC 標準形式と NLS ロケール形式の両方で指定された時刻値を変換します。
SET restore=##class(%SYS.NLS.Format).GetFormatItem("TimeSeparator")
WRITE "Time Separator is = ",restore,!
DO ##class(%SYS.NLS.Format).SetFormatItem("TimeSeparator","^")
WRITE "Time Separator is now = ",##class(%SYS.NLS.Format).GetFormatItem("TimeSeparator"),!
&sql(SELECT TO_CHAR('15:35:43.99','HH12:MI:SS PM'),
TO_CHAR('15^35^43.99','HH12:MI:SS PM')
INTO :standard,:local)
WRITE "Converted standard-format time: ",standard,!
WRITE "Converted locale-format time: ",local,!
DO ##class(%SYS.NLS.Format).SetFormatItem("TimeSeparator",restore)
WRITE "Time Separator is = ",##class(%SYS.NLS.Format).GetFormatItem("TimeSeparator")
タイムスタンプからフォーマットされた日付/時刻文字列への変換
TO_CHAR を使用して、タイムスタンプをフォーマットされた日付/時刻文字列に変換できます。tochar-expression の値は、有効な論理タイムスタンプ値とする必要があります。
このタイムスタンプの日付部分は、date-to-string 変換の format コードを使用してフォーマットされます。以下の表は、タイムスタンプの時刻部分に使用する追加の format コードを示しています。
形式コード | 意味 |
---|---|
HH | 時間 (1 ~ 12) |
HH12 | 時間 (1 ~ 12) |
HH24 | 時間 (0 ~ 23) |
MI | 分 (0 ~ 59) |
SS | 秒 (0 ~ 59) |
SSSSS | 午前 0 時 00 分からの秒数 (0 ~ 86388) |
AM | 午前 |
PM | 午後 |
以下の例は、現在のシステム日付 (タイムスタンプ) と、システム日付を表示するためにこのタイムスタンプを 2 つの異なるフォーマットで変換した値を返します。
SELECT SYSDATE,
TO_CHAR(SYSDATE,'MM/DD/YYYY HH:MI:SS'),
TO_CHAR(SYSDATE,'DD MONTH YYYY at SSSSS seconds')
format 文字列で使用されている、形式コードでない文字列はすべて、結果文字列のその位置にそのまま戻されます。
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 | 指定された位置に小数点区切り文字を配置して返します。使用される DecimalSeparator は、ロケールで定義されたものと同じです。既定はピリオド "." です。format 引数内には、"D" は 1 つしか許可されません。 |
G | 9G999 | 指定された位置に数値グループ・セパレータを配置して返します。使用される NumericGroupSeparator は、ロケールで定義されたものと同じです。既定はコンマ "," です。小数点区切りの右側に数値グループ・セパレータが出現することはありません。 |
FM | FM90.9 | 先頭や末尾に空白がない値を返します。 |
, | 9,999 | 指定された位置にコンマを付けて返します。10 進法の右側にコンマが表れることはありません。format 引数をコンマで始めることはできません。 |
. | 99.99 | 指定した位置に 10 進小数点 (ピリオド ".") を返します。format 引数内には、"." は 1 つしか許可されません。 |
format では、小数区切りおよび数値グループ・セパレータを、リテラル文字として、またはロケールの DecimalSeparator と NumericGroupSeparator の現在の値として指定できます。現在のロケール値は以下のように確認できます。
WRITE ##class(%SYS.NLS.Format).GetFormatItem("DecimalSeparator"),!
WRITE ##class(%SYS.NLS.Format).GetFormatItem("NumericGroupSeparator")
format 引数が入力数値式より整数桁数が小さい場合、TO_CHAR は数値を返さずに、複数のシャープ記号 (##) の文字列を返します。シャープ記号の数は、現在の format 引数の長さに 1 を加えたものです。
format 引数が入力数値式より小数桁数が小さい場合、TO_CHAR は指定された桁数に数値を丸めるか、小数形式でない場合は整数に丸めます。
tochar-expression が NULL の場合、TO_CHAR は NULL を返します。
Number-to-String の例
次の埋め込み SQL の例では、数値から文字列への基本的な変換を示します。
&sql(SELECT
TO_CHAR(1000,'9999'),
TO_CHAR(10,'9999')
INTO :numfull,:numshort)
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)
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)
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,'99,999,999.99'),
TO_CHAR(12345678.90,'FM99,999,999.99')
INTO :num,:fmnum)
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)
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)
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,'9999999.9'),
TO_CHAR(1234567.91,'9999999')
INTO :a,:b)
IF SQLCODE'=0 {
WRITE !,"Error code ",SQLCODE }
ELSE {
WRITE !,"Formatted number:",a
WRITE !,"Formatted number:",b }
返される数字は、それぞれ、"1234567.5" と "1234568" に丸められます。