数字書式モデル(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 | 指定された位置にカンマを返します。デジタル書式モデルで複数のカンマを指定できます。制限事項は以下のとおりです: カンマ要素はデジタル書式モデルの先頭には置けません。 デジタル書式モデル内では、カンマは10進小数点またはピリオドの右側には置けません。 |
| . (小数点) | 99.99 | 小数点、つまり指定された位置のピリオド(.)を返します。制限事項は以下のとおりです: デジタル書式モデルでは小数点は1つしか指定できません。 |
| $ | $9999 | プレフィックスのドル記号付き値を返します。 |
| 0 | 0999 9990 | プレフィックスのゼロを返します。プレフィックスのゼロは通常スペースを表しますが、フォーマットされた値が0の場合は例外で、この場合プレフィックスのゼロは文字ゼロとして表されます。サフィックスのゼロも返します。 |
| 9 | 9999 | 指定された桁数の結果を返します。フォーマットされた値が正の数値の場合、結果にはプレフィックスのスペースが含まれ、そうでない場合はプレフィックスのマイナス記号が含まれます。 |
| B | B9999 | 結果が0の場合、スペースを返します。 |
| 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の数に応じて、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 | '-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