今回は、TO_CHAR
を使って数値を見やすく整形する方法についてお伝えします。この記事を読むことで、小数点の桁数を揃えたり、カンマ区切りや記号を追加したりと、TO_CHAR
を使った多様なフォーマット方法がわかるようになります。
TO_CHARで数値を見やすく整形する方法
基本的な書き方は
TO_CHAR(数値, 'フォーマット')
です。
では、いろいろなフォーマットの例についてみていきましょう!
金額(カンマ区切り)
SELECT
TO_CHAR(10000, 'FM999,999') AS FM_FORMAT -- FMあり(空白なし)
, TO_CHAR(10000, '999,999') AS NORMAL_FORMAT -- FMなし(空白あり)
, TO_CHAR(1000000, '999,999') AS OVERFLOW_CHECK -- 桁あふれテスト
FROM
DUAL;
FM_FORMAT | NORMAL_FORMAT | OVERFLOW_CHECK |
---|---|---|
10,000 | 10,000 | ######## |
ポイント
FM
(Fill Mode)の効果FM
を付けると、不要な空白や余分なゼロが削除される- 例:
FM_FORMAT
→ 左寄せでスッキリ10,000
FM
なしの場合は右寄せで空白が入るNORMAL_FORMAT
→ フォーマット幅に合わせて左側に空白1文字- 例:
_10,000
(_
は空白1文字)
- 桁あふれの挙動
- フォーマット指定より数字の桁数が大きい場合、
#######
と表示される - 例:
OVERFLOW_CHECK
→1000000
は'999,999'
に収まらないため#######
- フォーマット指定より数字の桁数が大きい場合、
小数点2桁
SELECT
TO_CHAR(0, 'FM9990.00') AS DECIMALS1 -- 0を必ず表示
, TO_CHAR(0, 'FM9999.00') AS DECIMALS2 -- 9は数字があるときだけ表示
FROM
DUAL;
DECIMALS1 | DECIMALS2 |
---|---|
0.00 | .00 |
ポイント
0は必ず表示なので、値が0の時「9990.00」でフォーマットすると0.00と表示されるが「9999.00」だと.00で表示される。
通貨記号付き
SELECT
TO_CHAR(888, '999,999') AS CURRENCY1
, TO_CHAR(9999, 'L999,999') AS CURRENCY2 -- 記号付き
FROM
DUAL;
CURRENCY1 | CURRENCY2 |
---|---|
888 | $9,999 |
ポイント
Lをつけることで
通貨記号付きで表示できますが、デフォルトではセッションの NLS_CURRENCY に設定されている記号(多くの場合 $
)が表示されます。
※日本円で表示したい場合は、NLS_CURRENCY を ¥ に変更
-- セッションの通貨記号を日本円に変更
ALTER SESSION SET NLS_CURRENCY='¥';
SELECT
TO_CHAR(888, 'L999,999') AS CURRENCY1
, TO_CHAR(9999, 'L999,999') AS CURRENCY2
FROM
DUAL;
CURRENCY1 | CURRENCY2 |
---|---|
¥888 | ¥9,999 |
固定(ゼロ埋め)
SELECT
TO_CHAR(123, '00000') AS ZERO_PADDING1
, TO_CHAR(1234, '00000') AS ZERO_PADDING2
FROM
DUAL;
ZERO_PADDING1 | ZERO_PADDING2 |
---|---|
00123 | 01234 |
ポイント
5桁までゼロ埋めしてくれるサンプルですが、値が6桁になると桁があふれてしまうため#######
になります。
正負の明示
SELECT
TO_CHAR(100, 'S9990') AS NUMBER_PLUS -- 正の数
, TO_CHAR(-100, 'S9990') AS NUMBER_MINUS -- 負の数
FROM
DUAL;
NUMBER_PLUS | NUMBER_MINUS |
---|---|
+100 | -100 |
ポイント
Sをつけることで明示的に+/-を追加して表示してくれます。
SELECT
TO_CHAR(100, '9990') AS WITHOUT_SIGN -- Sなし
, TO_CHAR(100, 'S9990') AS WITH_SIGN -- Sあり
FROM DUAL;
WITHOUT_SIGN | WITH_SIGN |
---|---|
100 | +100 |
整数を比較するとわかりやすいですね!
まとめ
「0を0.00で出したい」「桁区切りをつけたい」「通貨記号を入れたい」そんな時は、まずTO_CHARを試してみましょう!