オラクル to_char 謎のスペース
2007/10/12
oracle
オラクル
データベースオラクルの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/オラクルをマスターするための基本と仕組み
: