SQL*Plusで数値型の出力フォーマットを変更する

Oracleの数値の出力フォーマットを変更する方法についてです。



例えば小数点の「0.1」はデフォルトの状態では「.1」と表示されます。一般的には違和感を感じると思います。「0.1」と表示したいことが多いでしょう。そんなときには数値の出力フォーマットを指定すればOKです。

-- (1)
SET NUMFORMAT 出力フォーマット
-- 省略形
SET NUMF 出力フォーマット
or
-- (2)
COLUMN カラム名 FORMAT 出力フォーマット
-- 省略形
COL カラム名 FOR 出力フォーマット


(1)はすべての数値に対する指定です。
(2)は特定のカラムに対する指定です。
(1)と(2)が両方指定された場合には、(2)が優先されます。

「NUMBER(10,3)」の「C1」というカラム名に対するフォーマットとしては、次のようなものが適切でしょう。
COLUMN C1 FORMAT 9999990.999
or
COLUMN C1 FORMAT 9,999,990.999


「出力フォーマット」の指定には、基本的に「9」(もしくは「0」)の数で桁数を指定します。もしも出力する値の桁が指定されたフォーマットの桁を超えている場合には、その行の項目は「#」埋めの文字列になってしまいます。型の桁数にあわせたフォーマットにしておくことが無難でしょう。

整数部分の1桁目に「9」の替わりに「0」を指定することで、整数部分が0であっても0を表示します。最上位桁に「0」を指定すると上位桁を0埋めした文字列を出力します。

フォーマットの出力例を示します。
初期状態 9999990.999 0999999.999 9999999.999
0 0 0.000 0000000.000 .000
1 1 1.000 0000001.000 1.000
-0.1 -.1 -0.100 -0000000.100 -.100
1234567.089 1234567.09 1234567.089 1234567.089 1234567.089

※いろいろ試したのですが、上記の例で「0」「1」「-0.1」「1234567.089」と表示するようなフォーマット指定はできないようです。


フォーマットの指定には、以下のものもあります。
  • 通貨記号を出力
  • 負の数を「<>」でくくって出力
  • 正の場合にプラス記号を出力
  • 科学表記法で出力
  • ローマ数字で出力
しかし…あまり使わないのではないかと思います。
「9999990.999」か「9,999,990.999」を覚えておけば十分だと思います。
※文字列型・日時型のフォーマットに関してはこちらを参照してください。SQL*Plusでselect結果のカラム幅を狭くする

要素 説明
桁数指定 9 9999 9の数で指定した桁数の値が表示されます。値には、正の値の場合は先行空白、負の値の場合は先頭に先行マイナス記号が表示されます。先行0(ゼロ)には空白が表示されます。0(ゼロ)の値には0(ゼロ)が表示されます。
整数部 0 0999 先行0(ゼロ)が表示されます。
9990 後続0(ゼロ)が表示されます。
B B9999 書式モデル内の0(ゼロ)にかかわらず、整数部が0(ゼロ)の場合、固定小数点数の整数部に空白が表示されます。
小数部 . (ピリオド) 99.99 数値の整数部と小数部を区切るピリオド(小数点)が表示されます。
D 99D99 数値の整数部と小数部を区切る小数点文字が表示されます。
TM TM 小数点文字の最小の数が表示されます。デフォルトはTM9です。出力に使用される固定表記法の場合は最大64文字、科学表記法の場合は65文字以上です。TMの前に他の要素を指定することはできません。TMの後には単一の9またはEのみを指定できます。
カンマ ,(カンマ) 9,999 指定した位置にカンマが表示されます。
G 9G999 数値の整数部の指定した位置に桁グループ・セパレータが表示されます。
正負記号 S S9999 先行マイナス記号またはプラス記号が表示されます。
9999S 後続マイナス記号またはプラス記号が表示されます。
MI 9999MI 負の値の後に後続マイナス記号が表示されます。正の値の後に後続空白が表示されます。
PR 9999PR 負の値は<山カッコ>で囲まれて表示されます。正の値の場合は、先行空白および後続空白が表示されます。
通貨記号 L L999 指定した位置に各国通貨記号が表示されます。
U U9999 指定した位置に、第2通貨記号が表示されます。
$ $9,999 先行ドル記号が表示されます。
C C999 指定した位置にISO通貨記号が表示されます。
その他 EEEE 9.999EEEE 値が科学表記法で表示されます。(書式には確実に4つの「E」を含める必要があります)。
RN RN 大文字のローマ数字が表示されます。値は1~3999の整数です。
rn rn 小文字のローマ数字が表示されます。値は1~3999の整数です。


2011/11/06