数値フォーマットモデル(Number Format Models)は、データベースに格納される固定小数点数と浮動小数点数の形式を指定します。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 | 指定された位置にカンマを返します。数値書式モデルでは複数のカンマを指定できます。制限事項は以下のとおりです: カンマ要素は数値書式モデルの先頭には含められません。 数値書式モデル内で、カンマは小数点またはピリオドの右側に配置することはできません。 |
| . (小数点) | 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 | Vの後ろに続く9の数をnとすると、10n倍の値(必要に応じて切り上げられる場合があります)を返します。 |
| 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 | '-.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