数字フォーマットモデル(Number Format Models)は、データベースに格納される固定小数点数と浮動小数点数の形式を指定します。SQL文内でNUMBER、BINARY_FLOAT、またはBINARY_DOUBLE型の値をVARCHAR2データ型に変換する必要がある場合、関数内でこれらの数字フォーマットモデルを使用できます。
数字書式モデルの要素
数字書式モデルは、1つ以上の数字書式要素で構成されます。負の戻り値には自動的に前置きのマイナス記号が含まれ、正の値には自動的に前置きのスペースが含まれます。ただし、書式モデルにMI、S、PRなど、数字の正負を示す書式要素が含まれている場合はこの限りではありません。
次の表は、数字書式に含まれる要素とその具体的な使用方法を示しています。
番号要素 |
例 |
説明 |
|---|---|---|
| , (カンマ) | 9,999 | 指定した位置にカンマを返します。数字書式モデルで複数のカンマを指定できます。制限事項は以下のとおりです:
|
| . (小数点) | 99.99 | 小数点を返します。つまり、指定された小数点の位置です。制限事項:数字書式モデル内では小数点は1つしか指定できません。 |
| $ | $9999 | プレフィックスのドル記号付きの値を返します。 |
| 0 | 0999 9990 | プレフィックスのゼロを返します。サフィックスのゼロも返します。 |
| 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 | 先頭の空白を削除します。 |
数字書式モデルは、以下の関数で使用できます:
TO_CHAR 関数では、
NUMBER、BINARY_FLOAT、またはBINARY_DOUBLEデータ型の値をVARCHAR2データ型に変換します。TO_NUMBER 関数では、
CHARまたはVARCHAR2データ型の値をNUMBERデータ型に変換します。TO_BINARY_FLOAT および TO_BINARY_DOUBLE 関数では、
CHARおよびVARCHAR2式をBINARY_FLOATまたはBINARY_DOUBLE型に変換します。
例
'S'形式の要素は、数値形式モデルの最初または最後にのみ配置できます。開始位置にある場合、正の数はプラス記号(+)を付けて返され、負の数はマイナス記号(-)を付けて返されます。終了位置にある場合、正の数はサフィックスのプラス記号(+)を付けて返され、負の数はサフィックスのマイナス記号(-)を付けて返されます。
obclient> SELECT TO_CHAR(-1234567890, '9999999999S') FROM DUAL; +------------------------------------+ | TO_CHAR(-1234567890,'9999999999S') | +------------------------------------+ | 1234567890- | +------------------------------------+ 1 row in set obclient> SELECT TO_CHAR(1234567890, '9999999999S') FROM DUAL; +-----------------------------------+ | TO_CHAR(1234567890,'9999999999S') | +-----------------------------------+ | 1234567890+ | +-----------------------------------+ 1 row in set'9'形式モデルは、指定された桁数の値を返します。正の数の場合は先頭にスペースを付けて返し、負の数の場合は先頭にマイナス記号を付けて返します。先頭のゼロは空ですが、ゼロ値は除きます。この値は固定小数点数の小数部がゼロとして返されます。以下の例のように、小数部は2つの'0'で補完されます。
obclient> SELECT TO_CHAR(0, '99.99') FROM DUAL; +--------------------+ | TO_CHAR(0,'99.99') | +--------------------+ | .00 | +--------------------+ 1 row in set obclient> SELECT TO_CHAR(0.1, '99.99') FROM DUAL; +----------------------+ | TO_CHAR(0.1,'99.99') | +----------------------+ | .10 | +----------------------+ 1 row in set obclient> SELECT TO_CHAR(-0.2, '99.99') FROM DUAL; +-----------------------+ | TO_CHAR(-0.2,'99.99') | +-----------------------+ | -.20 | +-----------------------+ 1 row in set結果がゼロの場合、'B'形式モデルはスペースを返します。
obclient> SELECT TO_CHAR(0, 'B9999') FROM DUAL; +--------------------+ | TO_CHAR(0,'B9999') | +--------------------+ | | +--------------------+ 1 row in set'FM'形式モデルは、先頭のスペースを除去することを示します。
obclient> SELECT TO_CHAR(123.456, 'FM999.009') FROM DUAL; +------------------------------+ | TO_CHAR(123.456,'FM999.009') | +------------------------------+ | 123.456 | +------------------------------+ 1 row in set'EEEE'形式モデルは、値を科学計算書式で表すことを示します。
obclient> SELECT TO_CHAR(123.456, '9.9EEEE') FROM DUAL; +----------------------------+ | TO_CHAR(123.456,'9.9EEEE') | +----------------------------+ | 1.2E+02 | +----------------------------+ 1 row in set obclient> SELECT TO_CHAR(123.456, 'FM9.9EEEE') FROM DUAL; +------------------------------+ | TO_CHAR(123.456,'FM9.9EEEE') | +------------------------------+ | 1.2E+02 | +------------------------------+ 1 row in set'L '形式モデルは、指定された位置に現地通貨記号を返すことを示します。パラメータ
NLS_CURRENCYが現在表す値が使用されます。obclient> SELECT TO_CHAR(123.456, 'FML999.99') FROM DUAL; +------------------------------+ | TO_CHAR(123.456,'FML999.99') | +------------------------------+ | $123.46 | +------------------------------+ 1 row in set