今回は、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を試してみましょう!
