Oracle Databaseでは、TO_CHAR(number)
関数は数値をVARCHAR2
に変換します format引数で指定された形式の値。
構文
構文は次のようになります:
TO_CHAR(n [, fmt [, 'nlsparam' ] ])
場所:
-
n
タイプはNUMBER
にすることができます 、BINARY_FLOAT
、またはBINARY_DOUBLE
。 -
fmt
結果のフォーマット方法を指定するオプションのフォーマットモデルです。フォーマットモデルの構築に使用できる有効な数値フォーマット要素を参照してください。 -
'nlsparam'
さまざまな文字が返される方法を指定するオプションの引数です。これを使用して、10進文字とグループ区切り文字、現地通貨記号、および国際通貨記号を指定できます。この引数を省略すると、現在のセッションのデフォルト値が使用されます。
例
関数がどのように機能するかを示す例を次に示します。
SELECT TO_CHAR(12345, '99G999') AS Result
FROM DUAL;
結果:
RESULT __________ 12,345
最初の引数はフォーマットする実際の数値であり、2番目の引数はフォーマットモデルです。フォーマットモデルは、数値のフォーマット方法を指定します。
この場合、フォーマットモデルは、適切な位置にあるグループ区切り文字を使用して数値をフォーマットします。各数字は9
で表されます 、およびG
で表されます 。
フォーマットモデルを少し変更すると、次のようになります。
SELECT TO_CHAR(12345, '099G999') AS Result
FROM DUAL;
結果:
RESULT ___________ 012,345
この場合、フォーマットモデルは0
で開始しました。 キャラクター。これにより、該当する場合は常に先行ゼロが返されます。 9
文字は先行ゼロを返しません。
実際、すべての9
を置き換えることができます s 0
s必要に応じて。使用するフォーマット要素に応じて、結果が大幅に異なる可能性があることを示す比較を次に示します。
SELECT
TO_CHAR(12, '000G000') AS "000G000",
TO_CHAR(12, '999G999') AS "999G999"
FROM DUAL;
結果:
000G000 999G999 ___________ ___________ 000,012 12
通貨記号
L
を使用できます 現地通貨記号を返すformat要素。
例:
SELECT TO_CHAR(12345, 'L99G999D99') AS Result
FROM DUAL;
結果:
RESULT _______________________ $12,345.00
この例では、現地通貨記号(L
で表される)を使用して結果を出力するフォーマットモデルを使用しています。 )、グループセパレータ(G
で表されます) )、10進文字(D
で表されます )、そしてもちろん、各数字(9
で表されます) 。
現地通貨記号は、NLS_CURRENCY
の現在の値によって決定されます パラメータ。ドル記号($
)を使用できたのは事実です )通貨記号の場合ですが、これは通貨がドル建てであることを前提としています。世界中には他にも多くの可能な通貨があり、L
format要素は、ユーザーのセッションの現地通貨記号を動的に返すことができます。
NLSパラメータの値を確認する必要がある場合は、それらの値を確認する方法を参照してください。
この関数で数値をフォーマットするために使用できるフォーマット要素のリストについては、Oracleの数値フォーマット要素の完全なリストを参照してください。
デフォルトの形式
fmt
を省略した場合 引数の場合、数値はVARCHAR2
に変換されます 有効数字を保持するのに十分な長さの値。
形式を指定せずに数値を変換する例を次に示します。
SELECT TO_CHAR(525.45)
FROM DUAL;
結果:
525.45
'nlsparam'
引数
'nlsparam'
引数を使用して、 10進文字とグループ区切り文字、現地通貨記号、および国際通貨記号を指定できます。
次の形式を取ります:
'NLS_NUMERIC_CHARACTERS = ''dg''
NLS_CURRENCY = ''text''
NLS_ISO_CURRENCY = territory '
例:
SELECT
TO_CHAR(
1234.56,
'L99G999D99',
'NLS_NUMERIC_CHARACTERS = '',.''
NLS_CURRENCY = ''€''
NLS_ISO_CURRENCY = Germany'
)
FROM DUAL;
結果:
€1.234,56
これもまたですが、今回はL
を置き換えます C
を使用 フォーマットモデル:
SELECT
TO_CHAR(
1234.56,
'C99G999D99',
'NLS_NUMERIC_CHARACTERS = '',.''
NLS_CURRENCY = ''€''
NLS_ISO_CURRENCY = Germany'
)
FROM DUAL;
結果:
EUR1.234,56
C
ISO通貨記号を返します。この場合はEUR
です。 。
パディングを抑制する方法
一部の例では、結果の左側にパディングが適用されていることに気付いたかもしれません。このようなパディングは、fm
で削除できます。 フォーマット修飾子。
例:
SELECT
TO_CHAR(
1234.56,
'fmL99G999D99',
'NLS_NUMERIC_CHARACTERS = '',.''
NLS_CURRENCY = ''€''
NLS_ISO_CURRENCY = Germany'
)
FROM DUAL;
結果:
€1.234,56
ヌル引数
null
を渡す 結果はnull
:
SET NULL 'null';
SELECT TO_CHAR(null)
FROM DUAL;
結果:
null
デフォルトでは、SQLclおよびSQL * Plusは、null
の場合は常に空白を返します。 SQL SELECT
の結果として発生します 声明。
ただし、SET NULL
は使用できます 返される別の文字列を指定します。ここでは、文字列null
を指定しました 返却する必要があります。
引数がありません
引数を渡さずに関数を呼び出すと、エラーが発生します:
SELECT TO_CHAR()
FROM DUAL;
結果:
SQL Error: ORA-00938: not enough arguments for function 00938. 00000 - "not enough arguments for function"
あまりにも多くの引数を渡すと、エラーが発生します:
SELECT TO_CHAR(123, '99', 'NLS_ISO_CURRENCY = GERMANY', 'oops!' )
FROM DUAL;
結果:
SQL Error: ORA-00939: too many arguments for function 00939. 00000 - "too many arguments for function"