数値書式モデルは、データベースに格納される固定小数点数と浮動小数点数の形式を指定します。SQLステートメント内でNUMBER、BINARY_FLOAT、またはBINARY_DOUBLE型の値をVARCHAR2データ型に変換する必要がある場合、関数内の数値書式モデルを使用できます。
関数における数値書式モデル
数値書式モデルは、以下の関数で使用できます:
式、条件、SQL関数、およびSQLステートメントに
NUMBER、BINARY_FLOAT、またはBINARY_DOUBLEが現れた場合、その値をVARCHAR2データ型に変換する必要がある場合、TO_CHAR関数のパラメータを使用してこれらの数値の書式を指定できます。式、条件、SQL関数、およびSQLステートメントに
CHARまたはVARCHAR2が現れた場合、その値をNUMBERデータ型に変換する必要がある場合、TO_NUMBER関数のパラメータ(NLS_NUMERIC_CHARACTERSは現在サポートされていません)を使用してこれらの数値の書式を指定できます。式、条件、SQL関数、およびSQLステートメントに
CHARまたはVARCHAR2が現れた場合、その値をBINARY_FLOATまたはBINARY_DOUBLEに変換する必要がある場合、TO_BINARY_FLOATおよびTO_BINARY_DOUBLE関数のパラメータを使用して数値書式を指定できます。
数値書式モデルは、数値を四捨五入し、有効数字の桁数を取ります。値の小数点以下の桁数が、書式で指定された桁数よりも多い場合、その値は # で置き換えられます。
NUMBER の正の値が非常に大きく、指定された書式では表現できない場合、その値は無限大記号(〜)に置き換えられます。負の NUMBER 値が非常に小さく、指定された書式では表現できない場合、その値は負の無限大記号(-〜)に置き換えられます。
デジタルフォーマットモデルの要素
数字書式要素
数字書式モデルは、1つ以上の数字書式要素で構成されます。負の戻り値には自動的に先頭のマイナス記号が付き、正の値には自動的に先頭のスペースが付きます。ただし、書式モデルにMI、S、PRなど、数字の正負を示す書式要素が含まれている場合はこの限りではありません。
次の表は、数字書式モデルに含まれる要素とその具体的な使用方法を示しています。
デジタル書式要素 |
例 |
説明 |
|---|---|---|
| , (カンマ) | 9,999 | 指定された位置にカンマを返します。デジタル書式モデルで複数のカンマを指定できます。制限事項は以下のとおりです: カンマ要素はデジタル書式モデルの先頭には置けません。 デジタル書式モデル内で、カンマは10進数の小数点またはピリオドの右側には置けません。 |
| . (小数点) | 99.99 | 小数点、つまり指定された位置のピリオド(.)を返します。制限事項は以下のとおりです: デジタル書式モデルでは、小数点は1つしか指定できません。 |
| $ | $9999 | プレフィックスのドル記号付き値を返します。 |
| 0 | 0999 9990 | プレフィックスのゼロを返します。プレフィックスのゼロは通常スペースを表しますが、書式設定された値が0の場合は例外で、この場合プレフィックスのゼロは文字ゼロとして表されます。サフィックスのゼロも返します。 |
| 9 | 9999 | 指定した桁数の結果を返します。フォーマットされた値が正数の場合、結果には先頭の空白が含まれます。負数の場合は、結果には先頭のマイナス記号が含まれます。 |
| B | B9999 | 結果がゼロの場合、空白を返します。 |
| C | C999 | 指定された位置にISO通貨記号(現在のNLS_ISO_CURRENCYパラメータが表す値)を返します。 |
| D | 99D99 | 「.」と同じ役割ですが、1回だけ使用できます。違いは、この要素がNLS_NUMERIC_CHARACTERパラメータのデフォルト値を使用する点です。 |
| EEEE | 9.9EEEE | 科学記数法で表された値を返します。 |
| G | 9G999 | 「.」と同じ役割ですが、この要素はパラメータ NLS_NUMERIC_CHARACTER のデフォルト値を使用します。 |
| L | L999 | 指定された位置に現地通貨記号を返します。パラメータ NLS_CURRENCY が現在表す値が使用されます。 |
| Mi | 9999MI | テールマイナス記号(-)付きの負の値を返します。テールスペース付きの正の値を返します。制限事項:MI形式の要素は、数値書式モデルの最後の位置にのみ配置できます。 |
| PR | 9999PR | クォートマーク<>内の負の値を返します。先頭および末尾にスペースが付いた正の値も返します。制限事項:PR書式要素は、数字書式モデルの最後の位置にのみ配置できます。 |
| RN(rn) | RN rn | 大文字ローマ数字で値を返します。小文字ローマ数字で値を返します。制限事項:値は1から3999の間の整数である必要があります。 |
| S | S9999 9999S |
|
| TM | TME TM9 | デフォルト値はTM9です。出力が64文字を超えない限り、固定記号で数字を返します。出力が64文字を超えると、自動的に科学記数法で数字を返します。数字の長さが64ビットを超える場合、TM9の出力はTMEの出力と同じになります。 |
| U | U9999 | 指定された位置に、NLS_dual_currencyパラメータが表す現在の値に基づいて決定されるユーロ(またはその他の通貨)の二重通貨記号を返します。 |
| V(v) | 999V99 | 10n倍の値を返します(必要に応じて四捨五入)。ここで、nはVの後ろに続く9の数です。 |
| X(x) | XXXX xxxx | 指定された桁数の16進数値を返します。指定された数が整数でない場合は、整数に切り捨てます。制限事項は以下のとおりです:
|
| FM(fm) | FM999 | 先頭の空白を削除します。 |
フォーマット要素による変換例
次の表は、異なる数値に対してフォーマット要素のパラメータ fmt を指定し、SQLコマンド SELECT TO_CHAR(number, 'fmt') FROM DUAL; を実行した場合の変換結果を示しています。フォーマットモデルパラメータ fmt を省略した場合、数値はすべての有効数字を保持するために十分に長い VARCHAR2 に変換されます。
数値 |
'fmt' |
結果 |
|---|---|---|
| 0 | 99.99 | '.00' |
| +0.1 | 99.99 | '.10' |
| -0.2 | 99.99 | '-.20' |
| 0 | 90.99 | '0.00' |
| +0.1 | 90.99 | '0.10' |
| -0.2 | 90.99 | '-0.20' |
| 0 | 9999 | '0' |
| 1 | 9999 | '1' |
| +123.456 | 999.999 | '123.456' |
| -123.456 | 999.999 | '-123.456' |
例
数値0を小数点以下2桁の有効数字を持つ値に変換します。
obclient> SELECT TO_CHAR(0, '99.99') FROM DUAL; +--------------------+ | TO_CHAR(0,'99.99') | +--------------------+ | .00 | +--------------------+ 1 row in setfmtパラメータを省略し、その値のすべての有効数字を保持します。obclient> SELECT TO_CHAR(123.456) FROM DUAL; +------------------+ | TO_CHAR(123.456) | +------------------+ | 123.456 | +------------------+ 1 row in setTO_CHARの結果が40バイトを超える場合、または渡されたパラメータがBINARY_DOUBLEまたはBINARY_FLOAT型の場合、結果は科学記数法に変換されます。obclient> SELECT TO_CHAR(12355555555555555555555555555555555555555555555555) FROM DUAL; +-------------------------------------------------------------+ | TO_CHAR(12355555555555555555555555555555555555555555555555) | +-------------------------------------------------------------+ | 1.2355555555555555555555555555555556E+49 | +-------------------------------------------------------------+ 1 row in set