【Oracle】TO_CHARで数値を見やすく整形する方法

Oracle

今回は、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_FORMATNORMAL_FORMATOVERFLOW_CHECK
10,000 10,000########

ポイント

  1. FM(Fill Mode)の効果
    • FMを付けると、不要な空白や余分なゼロが削除される
    • 例:FM_FORMAT → 左寄せでスッキリ 10,000
  2. FMなしの場合は右寄せで空白が入る
    • NORMAL_FORMAT → フォーマット幅に合わせて左側に空白1文字
    • 例:_10,000_は空白1文字)
  3. 桁あふれの挙動
    • フォーマット指定より数字の桁数が大きい場合、####### と表示される
    • 例:OVERFLOW_CHECK1000000'999,999' に収まらないため #######

小数点2桁

SELECT
  TO_CHAR(0, 'FM9990.00') AS DECIMALS1   -- 0を必ず表示
  , TO_CHAR(0, 'FM9999.00') AS DECIMALS2 -- 9は数字があるときだけ表示
FROM
  DUAL;
DECIMALS1DECIMALS2
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;
CURRENCY1CURRENCY2
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;
CURRENCY1CURRENCY2
¥888¥9,999

固定(ゼロ埋め)

SELECT
  TO_CHAR(123, '00000') AS ZERO_PADDING1
  , TO_CHAR(1234, '00000') AS ZERO_PADDING2
FROM
  DUAL;
ZERO_PADDING1ZERO_PADDING2
0012301234

ポイント

5桁までゼロ埋めしてくれるサンプルですが、値が6桁になると桁があふれてしまうため#######になります。

正負の明示

SELECT
  TO_CHAR(100, 'S9990') AS NUMBER_PLUS      -- 正の数
  , TO_CHAR(-100, 'S9990') AS NUMBER_MINUS  -- 負の数
FROM
  DUAL;
NUMBER_PLUSNUMBER_MINUS
+100-100

ポイント

Sをつけることで明示的に+/-を追加して表示してくれます。

SELECT
  TO_CHAR(100, '9990') AS WITHOUT_SIGN  -- Sなし
  , TO_CHAR(100, 'S9990') AS WITH_SIGN  -- Sあり
FROM DUAL;
WITHOUT_SIGNWITH_SIGN
100+100

整数を比較するとわかりやすいですね!

まとめ

「0を0.00で出したい」「桁区切りをつけたい」「通貨記号を入れたい」そんな時は、まずTO_CHARを試してみましょう!

タイトルとURLをコピーしました