SQL*Plus の COLUMN コマンドの書式モデル
SQL*Plus において文字列、日付、数値のフォーマットを行なうための書式モデル。
SQL の書式モデルと異なる点も多い。
例) COLUMN column_name FORMAT format_string
文字列書式
文字列フォーマット:1カラムに表示できるバイト数(文字数ではない)を設定する。
デフォルトはカラムの定義幅。LONG、CLOB系 の場合は LONG システム変数 と LONGCHUNKSIZE システム変数の小さな方の値に制限される。
書式 | 説明(英語略に関しては一部憶測) |
An | A に続けて表示するバイト数を指定する。(Alphabetの略) |
An に指定できる n の値域は Windows 32bit の Oracle 10g で 1 〜 60000 まで(システム依存なのか不明)
文字列書式で気にしておく点
TO_CHAR の変換関数を使用すると変換元のカラムの定義幅より大きな列幅がデフォルトとして使用される。
例えば、Oracle 10g の JA16SJIS 環境において TO_CHAR(数値カラム) の書式は 'A80' になる。この幅は SQL*Plus のバージョンおよびデータベースのキャラクタセットによって変化すると書かれている。つまり、一定の列幅を保証したい場合には自前で書式設定しなさい。という事。
日付書式
日付フォーマット:日付項目は個別にフォーマットできない。
書式に指定できるのは NLS_DATE_FORMAT によって変換された文字列に対する
列幅のみである。
つまり An 書式
TO_CHAR(日付) で日付を文字列に変換すると NLS_DATE_FORMAT よりも大きな列幅がデフォルトになる。(例えば A40)
数値書式
数値フォーマット:COLUMN コマンドの数値書式モデルは SQL で指定できる。
数値書式モデル のすべてが使用できる。
数値書式を指定すると指定された有効桁数以内に格納される。
整数部有効桁数が書式の桁数より多い場合(桁あふれ)、番号記号(#) が値のかわりに戻される。
例) 12345.6789 ⇒ 書式 '9999.99' ⇒ ####.##
小数部は丸められる
例) 1234.56789 ⇒ 書式 '9999.99' ⇒ 1234.57
デフォルトの書式は 'TM9'
SQL*Plus の数値表示で気にしておく点
デフォルトの表示幅
- 書式を指定しない場合:NUMWIDTH システム変数(※1) と列ヘッダ幅の大きい方
- 書式を指定した場合: 列ヘッダと書式指定の幅に符号を表示する(※2)ために+1を加えた幅の大きい方
(※1) NUMWIDTH システム変数の値域は 2 〜 50 まで 'TM9' 書式は 最大 64
(※2) 書式修飾子 FM を使用することで符号表示の専用域を取り除くことができる。
非常に大きな正数で四捨五入時にオーバーフローすると無限大記号(〜)、負数では(- 〜)になる。(再現方法はわからない)
SQL における書式モデル