オラクル to_char 謎のスペース 2007/10/12

データベースオラクルのSQLについてです。

以下、Aさんから教えてもらったことです。

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
出力文字列をフォーマットするときに、to_charをよく使ったりします。

select to_char(8, '000') from dual


とすると

008

と出力されることを期待します。
そう出力されます。

が、しかし、、実はこれですと、頭にスペースが入ってきます。

select '"' || to_char(8, '000') || '"'from dual


" 008"

となります。
スペースなので気づかないときがあったりするので注意が必要です。

なので、知らない方なんとなく下記のようにしてしまいます(多分)

select trim(to_char(8, '000')) from dual


実は、この頭のスペースは符号が入っているんだよということらしいです。

ためしにマイナスにしてみます。

select '"' || to_char(-8, '000') || '"'from dual


すると結果

"-008"

となってスペースが入ってないことが確認できます。
デフォルトでは+の符号がつかないってことっぽいです。

結果に符合を表示させるのはsをつけます。

select '"' || to_char(8, 's000') || '"'from dual


"+008"

となります。

では、スペースをとるための書き方は、fmをつけるそうです。

select '"' || to_char(8, 'fm000') || '"'from dual


"008"

というふうになります。

修飾子FMは、符号の表示を制御するためのもののようです。
Fill Modeってことらしいです。

知らない人が案外いるかもしれませんね。

参考
書式モデル(数値) - Oracle/オラクルをマスターするための基本と仕組み

: