sql >> データベース >  >> RDS >> Oracle

OracleのTO_CHAR(number)関数

    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"

    1. 'SELECT'ステートメントの'IF'-列の値に基づいて出力値を選択します

    2. SQL Server DELETE –少し高度なシナリオでテーブルから1つ以上の行を削除する

    3. LIKE演算子がSQLiteでどのように機能するか

    4. SQLで複雑なクエリを作成する方法