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