突然ですが皆さん、Oracleの数値書式モデルは使いこなせていますか?
数値書式モデルとは、文字列型の数値に対して書式を設定することで、数値の表示形式をコントロールするというもの。
実際の現場では、主に先頭のゼロ埋めに使うことが多いです。
例)12.3を4桁で、かつ先頭はゼロ埋めしたい。
TO_CHAR(‘12.3’, ‘0000.9’) → 0012.3
書式は主に0か9、それとFMをつけるか否か、というのが実際よく使うのですが、ではその書式設定によってどのように数値が変わるのか、まとめてみようと思います。
実際の現場で使われる書式は以下の通り。
書式 | 内容 |
, (カンマ) | 指定した位置にカンマを返す |
. (ピリオド) | 指定した位置に小数点を返す |
0 (ゼロ) | 先頭の場合、桁が足りなくても0を返す |
9 | 正の値の場合:先頭の場合、桁が足りない時は空白を返す
負の値の場合:先頭の場合、桁が不足する時は負の記号をつけて空白を返す |
S | 負の場合は負の記号(−)、正の場合は正の記号(+)を返す |
FM | 前後に空白をつけずに返す |
上記の書式を使うと、数値をどのように表現できるのかを以下にまとめます。
数値:123456(6桁)※半角スペースは!で表現しています。
<例1:全て9、または全て0>
SELECT TO_CHAR(123456, ‘999999999’) FROM DUAL; → !!!123456
SELECT TO_CHAR(123456, ‘000000000’) FROM DUAL; → 000123456
<例2:0と9が混ざっている>
SELECT TO_CHAR(123456, ‘909,999,999’) FROM DUAL; → !00,123,456
SELECT TO_CHAR(123456, ‘090,999,999’) FROM DUAL; → 000,123,456
SELECT TO_CHAR(123456, ‘990,999,999’) FROM DUAL; → !10,123,456
SELECT TO_CHAR(123456, ‘099,999,999’) FROM DUAL; → 000,123,456
→0が出た時点でゼロ埋めされる。直感的ではないため、0と9が混ざっている場合は使い方に要注意。
<例3:FMを使用>
SELECT TO_CHAR(123456, ‘FM999999999’) FROM DUAL; → 123456
SELECT TO_CHAR(123456, ‘FM000000000’) FROM DUAL; → 000123456
→FMをつけることで、書式9で発生した空白を削除することができる。便利。
<例4:桁数が異なる>
SELECT TO_CHAR(12345678, ‘999999999’) FROM DUAL; → !12345678
SELECT TO_CHAR(123456789, ‘99999999’) FROM DUAL; → #########
→数値の桁数>書式の場合、文字化けが発生して全て#になる。
ちなみに#の数は書式の桁数+1になる。
今回はOracleで使える書式関数(TO_CHAR)についてまとめました。
この書式ですが、実は小数点を含んでくると直感的には分かりにくくなる箇所があるので、次回はその点についてまとめていきたいなと思います。
今回はここまで!
以上