Oracle SQL 関数 : TO_CHAR(数値) : 数値を文字列へ変換
stringRet := TO_CHAR( numberSrc [ , stringFormat [ , nlsParam ] ] );
TO_CHARは数値データnumberSrcを日付書式stringFormatに従ってVARCHAR2型のデータを返します。
stringFormatを指定しない場合はデフォルトの日付書式に従います。
nlsParamは月、日の名称及び略称の言語を指定します。
通常の処理でよく使用する書式文字を記します。
日付書式文字 |
変換内容 |
,(カンマ) |
指定した位置にカンマを返す |
.(ピリオド) |
指定した位置に小数点を返す(書式の中で1個のみ指定) |
0 |
先行0を返します |
9 |
正の値の場合は先頭空白を埋め込み、負の場合には負の記号を先頭に埋め込んで指定の桁数にして返す |
S |
負の値は(-)を、正の値は(+)を前に付ける。(Sが先頭に在る場合) |
FM |
前後に空白を付けずに返す |
SQL> SELECT ( '' '' || TO_CHAR(12345.6789, '999,999.999' ) || '' '' ) fm1, |
2 ( '' '' || TO_CHAR(12345.6789, '099,999.9999' ) || '' '' ) fm2, |
3 ( '' '' || TO_CHAR(12345.6789, 'FM999,999.999' ) || '' '' ) fm3, |
4 ( '' '' || TO_CHAR(12345.6789, 'FM099,999.9999' ) || '' '' ) fm4, |
5 ( '' '' || TO_CHAR(-12345.6789, '999,999.999' ) || '' '' ) fm5, |
6 ( '' '' || TO_CHAR(-12345.6789, '099,999.9999' ) || '' '' ) fm6, |
7 ( '' '' || TO_CHAR(-12345.6789, 'S999,999.999' ) || '' '' ) fm7, |
8 ( '' '' || TO_CHAR(-12345.6789, 'S099,999.9999' ) || '' '' ) fm8, |
9 ( '' '' || TO_CHAR(-12345.6789, '999,999.999S' ) || '' '' ) fm9, |
10 ( '' '' || TO_CHAR(-12345.6789, '099,999.9999S' ) || '' '' ) fm10, |
11 ( '' '' || TO_CHAR(12345.6789, '$999,999.999' ) || '' '' ) fm11, |
12 ( '' '' || TO_CHAR(12345.6789, '$099,999.9999' ) || '' '' ) fm12 |
FM7 FM8 FM9 FM10 FM11 FM12 |
' 12,345.679' ' 012,345.6789' '12,345.679' '012,345.6789' ' -12,345.679' '-012,345.6789' |
' -12,345.679' '-012,345.6789' ' 12,345.679-' '012,345.6789-' ' $12,345.679' ' $012,345.6789' |
尚、数値が指定桁数より大きい場合には桁数分だけ"#"が返される為、指定桁数は十分な桁数が必要です。
指定桁数より小さい数値の場合は空白が埋められ桁数分の文字列が表示されます。
SQL> SELECT TO_CHAR(123456789, '99,999,999' ) FMT8, |
2 TO_CHAR(123456789, '999,999,999' ) FMT9, |
3 TO_CHAR(1234567 , '999,999,999' ) FMT9_2 FROM DUAL; |
########### 123,456,789 1,234,567 |
コードとして使用している数値項目を「先頭0付き」で表示させたい場合は以下の様にします。
(上の例では説明が足りない様な気がしましたので、ここで改めて示します。)
2 TO_CHAR(123, 'FM099' ) AS "3桁先頭0" |
3 ,TO_CHAR(123, 'FM0999' ) AS "4桁先頭0" |
4 ,TO_CHAR(123, 'FM09999' ) AS "5桁先頭0" |
5 ,TO_CHAR(123, 'FM099999' ) AS "6桁先頭0" |
「'FM099'」の「99」の部分を LPAD 関数を使って置き換えます。
2 TO_CHAR(123, 'FM0' || LPAD( '9' , 2, '9' )) AS "3桁先頭0" |
3 ,TO_CHAR(123, 'FM0' || LPAD( '9' , 3, '9' )) AS "4桁先頭0" |
4 ,TO_CHAR(123, 'FM0' || LPAD( '9' , 4, '9' )) AS "5桁先頭0" |
5 ,TO_CHAR(123, 'FM0' || LPAD( '9' , 5, '9' )) AS "6桁先頭0" |
LPAD 関数の中の桁数指定を変化させれば汎用的に使えると思います。
参考までに、この処理を関数化してみましたので、以下に示します。
SQL> CREATE OR REPLACE FUNCTION NUM_PREZERO ( |
13 RETURN TO_CHAR(InNum, 'FM0' || LPAD( '9' , UnitWk - 1, '9' )); |
2 NUM_PREZERO(1, 1) || ' / ' || |
3 NUM_PREZERO(1, 3) || ' / ' || |
4 NUM_PREZERO(123, 5) || ' / ' || |
NUM_PREZERO(1,1)|| '/' ||NUM_PREZERO(1,3)|| '/' ||NUM_PREZERO(123,5)|| '/' ||NUM_PREZE |
1 / 001 / 00123 / 000123456 |
本書用のWebアプリを使ってSQLを実行し学習していきます。初心者の方に分かりやすく、図表を多く使って解説されています。 学習の最後には200問越えのドリルが付いていてSQLのスキルが試せる様になっています。