数値フォーマットモデル(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