数値用の書式モデル

主な用途は TO_CHARTO_NUMBER 関数などにおいてフォーマット文字列として使用する。
日付書式

書式 修飾子

修飾子FM とFX を使用して、符号の表示、0や空白の埋め方および書式検査の制御が可能。
FX,FM は便利な修飾子のわりに、あまり知られていない。(使われていないだけかもしれない)
└ 'vNum := TRIM(TO_CHAR(number));' のようなソースを見ることもある。
※ TO_CHAR ファンクション、TO_datetime ファンクションと SQL*Plus の COLUMN コマンドの書式モデル で利用できる。

書式説明
FM任意の位置に指定し、以後の文字、数値、日時の空白や0を圧縮する。
(Fill Mode:埋め込みモード ≠ Pad 、コアレスモードとでも呼んだ方がわかりやすそう。)
FX任意の位置に指定し、以後の書式を厳密なものとする。
(Formar Exact:厳密な書式)書式に適合しない場合にはエラーとなる。

数値書式

すべての数値書式モデルでは、数値が指定された有効桁数以内に格納される。
整数部有効桁数が書式の桁数より多い場合(桁あふれ)、番号記号(#)が値のかわりに戻される。
例) 12345.6789 ⇒ 書式 '9999.99' ⇒ ####.##
小数部は丸められる
例) 1234.56789 ⇒ 書式 '9999.99' ⇒ 1234.57

デフォルトの書式は 'TM9' である。

書式説明(英語略に関しては一部憶測)
カンマ(,)指定位置にカンマを戻す。
G指定位置に桁区切り(NLS_NUMERIC_CHARACTER*1)を戻す。(Group separatorの略)
ドット(.)指定位置に小数点文字を戻す。
D指定位置に小数点文字(NLS_NUMERIC_CHARACTER)を戻す。(1ヵ所のみ可能)
(Decimalの略)
0先頭に符号部(+時はスペース(' ')/-)を付与する()。先行ゼロに対して'0'、後続ゼロに対しても'0' を戻す。
9先頭に符号部(+時はスペース(' ')/-)を付与する()。先行ゼロに対してスペース(' ')、後続ゼロに対して'0'を戻す()。
後続する小数部がない場合の値0には '0' を戻す。(例を参考)
B0の場合、全体をスペース(' ')にする()。(0フォーマットより優先される) 
マニュアルでは、整数部が0の場合、固定小数点数の整数部に対して空白を戻す。
(Blankの略)マニュアルの文面と実際の動きは違うように思う。(=完全な0に対してのみのフォーマット)
C指定した位置にNLS_ISO_CURRENCY パラメータの値)を戻す。(JPY)
(Currencyの略)
EEEE科学表記(指数表記)で値を戻す。例 9.999EEEE (Exponent:指数の略)
L指定位置にローカル通貨記号(NLS_CURRENCY)を戻す。(円記号'¥')(Local currencyの略)
 ドル記号('$')だけ特別に書式内に直接書ける。
〜MI負の値の文末に負の符号(-)を戻す。必ず最後に記述する。
〜PR負の値の前後を山カッコ<> で囲んだ値を戻す。(Parenthesisの略)
RN(rn)大文字(小文字)のローマ数字で戻す。(1〜3999まで有効)(Roman Numeralsの略)
S符号(+/-)を戻す。先頭または最後にのみ記述可能。(Sign)
TM9/TMEできるだけ少ない文字数の 10 進数で戻す。(Text Minimum number の略)
TM9固定表記=デフォルト (64文字までは固定表記、65文字以上は科学表記)
TME(e) 科学表記/指数表記
V値に 10 の n 乗を掛けて戻す。 n は V に続く数字の値でなく「個数」。整数に丸められる。
例) 99V9 (Virtual-decimal-point:仮想小数点の略?)
X16進数値を戻す。(heXadecimalの略)

() FM修飾子の指定によって、さらに変化する。

 

書式の検証

書式例 (空白をアンダーバー、アンダースコア(_)にて表記)
TO_CHAR( n, 'fmt') , TO_CHAR( n, 'FMfmt')

書式
fmt
入力
n
出力書式
修飾子
なし
出力書式
修飾子
FM 使用
補足
TO_CHAR( n, '99.99')0.5'___.50''.5'符号を表示する部分はサプレスされている。
-0.5'-__.50''-.5' 
500'######'変化なし
(同左)
整数部桁あふれ。
0.005'___.01''.01'有効数字に丸められる。
0'___.00''0.'0のときのFMあり/なしで、かなり異なる結果になる。
TO_CHAR( n, '9')0'_0''0'書式修飾子がなく、小数部の書式指定もない場合、結果は '__'ではなく'_0' となる。
上のTO_CHAR( 0, '99.99') と比較参照
TO_CHAR( n, '00.00')0.5'_00.50''00.50'
-0.5'-00.50'変化なし
(同左)
500'######'変化なし
(同左)
0.005'_00.01''00.01'
0'_00.00''00.00' 
TO_CHAR( n, '0')0'_0''0'
TO_CHAR( n, 'B0.00')0'_____'NULL('')
0.05'_0.05''0.05'マニュアルによると、'__.05' / '.05' になるはずなのだが 読み違えているのか?

関連事項

日本オラクル
■ 日本オラクル 株式会社
■ オラクルマスター資格 (オラクルマスターとは
■ 会員制(無料)の公式技術サイト