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

Oracleで数値をフォーマットする方法

    Oracle Databaseでは、さまざまな方法で数値をフォーマットできます。

    たとえば、数値を通貨としてフォーマットし、適切な場所にコンマと小数点を配置できます。先行ゼロを指定したり、小数部分を追加したり、必要に応じて削除したりできます。

    この記事には、次の例が含まれています。

    • 数値を通貨としてフォーマットする
    • カンマ/千単位の区切り文字を追加します
    • 小数点以下の桁数を含める
    • 小数点以下をすべて削除
    • 先行ゼロを数値に追加する

    また、フォーマットがセッションのNLSパラメータによってどのように影響を受けるかについても説明します。

    NLS初期化パラメーターは、現在のセッションでグループ区切り文字、小数点文字、および通貨記号に使用される文字を決定します。これらのパラメータを利用して、ロケール対応のフォーマットを出力できます。

    TO_CHAR(number)などの関数を使用できます さらにLPAD() 数値を文字列に変換し、その場で好きなように正確にフォーマットします。 CAST()のような関数 キャストされるデータ型によっては、数値のフォーマット方法にも影響を与える可能性があります。

    簡単な例

    TO_CHAR()を使用して数値をフォーマットする簡単な例を次に示します。 機能:

    SELECT 
        TO_CHAR(12345, 'fmL99G999D00')
    FROM DUAL;

    結果:

    $12,345.00

    fmL99G999D00 partは、出力のフォーマット方法を決定するフォーマットモデルです。要件に合わせてフォーマットモデルを変更できます。

    フォーマットモデルの各文字はフォーマット要素であり、特別な意味があります。必要に応じて、フォーマット要素を追加または削除できます。

    数値をフォーマットするときにフォーマットモデルに使用できるフォーマット要素の完全なリストは次のとおりです。

    確かに、さまざまな形式要素に文字列リテラルを指定できます(たとえば、ドル記号($) )ドルの場合)、これは、通貨がそのハードコードされた値で表示されることを前提としています。世界中には他にも多くの可能な通貨があり、フォーマット要素はユーザーのセッションの現地通貨記号を動的に返すことができます。

    グループ区切り文字と10進文字についても同じです。ロケールが異なれば、使用される規則も異なります。これらのロケール対応のフォーマット要素を使用すると、コードの移植性が高まります。

    また、TO_CHAR() 関数を使用すると、関数内で独自のNLSパラメーターを渡すことができます。これを行うと、その関数呼び出しにのみ影響するため、通貨記号などをその場でフォーマットモデルにハードコーディングしたり、セッションのNLSパラメータを更新したりすることなく変更できます。

    次の例は、各フォーマット要素がどのように機能するかをより詳細に示しています。

    数値を通貨としてフォーマットする

    数値を通貨としてフォーマットする例を次に示します。

    SELECT 
        TO_CHAR(12, 'fmL99')
    FROM DUAL;

    結果:

    $12

    この場合、私はLを使用しました 現地通貨記号を指定するformat要素。現地通貨記号は、NLS_CURRENCYによって決定されます。 パラメータ。

    または、Cを使用することもできます またはU フォーマット要素。ISO通貨記号と二重通貨記号をそれぞれ返します。

    詳細と例については、Oracleで数値を通貨としてフォーマットする方法を参照してください。

    カンマ/千単位の区切り文字を追加

    千/グループの区切り文字には常にハードコードされたカンマを使用できますが、グループの区切り文字にピリオドを使用している国は考慮されていません。その逆は明らかに真実です。また、一部の国では、数千のグループが薄いスペースで区切られています。

    Gを使用できます グループ区切り文字を指定するformat要素。これにより、NLS_NUMERIC_CHARACTERSで指定されている該当するグループセパレータが動的に返されます。 パラメータ。このパラメーターは、グループ区切り文字と10進文字の両方を決定します。

    例:

    SELECT 
        TO_CHAR(12345, 'fm99G999')
    FROM DUAL;

    結果:

    12,345

    数が多い別の例を次に示します。

    SELECT 
        TO_CHAR(123456789, 'fm999G999G999')
    FROM DUAL;

    結果:

    123,456,789

    詳細については、Oracleでコンマを使用して数値をフォーマットする方法を参照してください。

    小数点以下の桁数を含める

    独自の基数文字(ピリオドなど)をフォーマットモデルにハードコーディングできることは事実ですが、これは、別の文字を使用する他のロケールには対応していません。

    Dを使用できます NLS_NUMERIC_CHARACTERSで指定された10進数/基数文字を返すformat要素 現在のセッションのパラメータ:

    SELECT 
        TO_CHAR(7, 'fm9D00')
    FROM DUAL;

    結果:

    7.00

    この場合、2つの0を使用しました 基数文字の後に要素をフォーマットします。このformat要素は、該当する場合、末尾のゼロを返します。

    9を使用する この場合、後続のゼロはすべて抑制されます:

    SELECT 
        TO_CHAR(7, 'fm9D99')
    FROM DUAL;

    結果:

    7.

    ただし、fmを削除すると フォーマット修飾子を使用すると、異なる結果が得られます:

    SELECT 
        TO_CHAR(7, '9D99')
    FROM DUAL;

    結果:

    7.00

    fm format修飾子は、結果に適用されるすべてのパディングを抑制します。それを削除することで、結果が埋め込まれます。これには先頭のスペースが含まれています。これは、数値が負の場合に負の符号が表示される場所であるためです。また、2つの9を指定したため、末尾のゼロも含まれています フォーマット要素。

    数値を小数点以下2桁にフォーマットする方法の詳細については、Oracleで数値を小数点以下2桁にフォーマットする3つの方法を参照してください。

    小数点以下の桁数をすべて削除

    小数点以下の桁数がないように数値をフォーマットする方法はいくつかあります。明らかな方法の1つは、フォーマット文字列から小数部分を削除することです。

    SELECT 
        TO_CHAR(7, 'fm9')
    FROM DUAL;

    結果:

    7

    ただし、ROUND()などの他の関数を使用することもできます。 、TRUNC() 、およびCAST() 同じまたは同様の効果を達成するため。

    例については、Oracleで小数点なしの数値をフォーマットする4つの方法を参照してください。

    先行ゼロを追加

    数値に先行ゼロを追加する場合、いくつかのオプションがあります。

    繰り返しますが、TO_CHAR()に固執します 関数の場合、0を使用できます 先頭と末尾のゼロを返すように要素をフォーマットします。

    SELECT 
        TO_CHAR(7, 'fm000')
    FROM DUAL;

    結果:

    007

    9を使用した場合 format要素の場合、先行ゼロはありません:

    SELECT 
        TO_CHAR(7, 'fm999')
    FROM DUAL;

    結果:

    7

    ただし、fmを削除すると フォーマット修飾子を使用すると、先行ゼロが含まれるスペースができます。

    SELECT 
        TO_CHAR(7, '999')
    FROM DUAL;

    結果:

    7

    先行ゼロを使用して数値をフォーマットする別の方法は、LPAD()を使用することです。 働き。この関数は、文字列または数値に左パディングを適用します。パディングに使用する文字を指定できるため、ゼロを使用すると、ゼロがパディングされます。

    例については、Oracleで先行ゼロを使用して数値をフォーマットする2つの方法を参照してください。

    NLSパラメータを確認する方法

    NLS(National Language Support)パラメーターは、クライアントとサーバーの両方でのロケール固有の動作を決定します。これには、グループ区切り文字、小数点文字、通貨記号などに使用する文字を決定するパラメーターが含まれます。

    NLSパラメータの現在の値を確認しましょう:

    SELECT 
        PARAMETER,
        VALUE
    FROM V$NLS_PARAMETERS;

    結果:

                     PARAMETER                             VALUE 
    __________________________ _________________________________ 
    NLS_LANGUAGE               ENGLISH                           
    NLS_TERRITORY              AUSTRALIA                         
    NLS_CURRENCY               $                                 
    NLS_ISO_CURRENCY           AUSTRALIA                         
    NLS_NUMERIC_CHARACTERS     .,                                
    NLS_CALENDAR               GREGORIAN                         
    NLS_DATE_FORMAT            DD/MON/RR                         
    NLS_DATE_LANGUAGE          ENGLISH                           
    NLS_CHARACTERSET           AL32UTF8                          
    NLS_SORT                   BINARY                            
    NLS_TIME_FORMAT            HH12:MI:SSXFF AM                  
    NLS_TIMESTAMP_FORMAT       DD/MON/RR HH12:MI:SSXFF AM        
    NLS_TIME_TZ_FORMAT         HH12:MI:SSXFF AM TZR              
    NLS_TIMESTAMP_TZ_FORMAT    DD/MON/RR HH12:MI:SSXFF AM TZR    
    NLS_DUAL_CURRENCY          $                                 
    NLS_NCHAR_CHARACTERSET     AL16UTF16                         
    NLS_COMP                   BINARY                            
    NLS_LENGTH_SEMANTICS       BYTE                              
    NLS_NCHAR_CONV_EXCP        FALSE                            

    次のパラメータは、数値と通貨のフォーマット要素を決定します。

    • NLS_CURRENCY
    • NLS_ISO_CURRENCY
    • NLS_NUMERIC_CHARACTERS
    • NLS_DUAL_CURRENCY

    これらのパラメータのデフォルト値は、NLS_TERRITORYによって決定されます。 パラメータ。 NLS_TERRITORYの値を設定するとき パラメータの場合、これは他のさまざまなパラメータ(前述の4つを含む)の値を暗黙的に設定します。

    私の場合、私の領土はオーストラリアです。したがって、これらの4つのパラメーターは、オーストラリアでの数値の通常のフォーマット方法を反映しています。たとえばドイツに変更すると、これらの4つのパラメーターは、ドイツのフォーマットを反映するように更新されます。

    ただし、各パラメータを個別に明示的に設定できます。これにより、NLS_TERRITORYによって暗黙的に設定された値をオーバーライドできます。 パラメータ。


    1. CRMデータベースに含める4種類の情報

    2. MariaDBでのFROM_DAYS()のしくみ

    3. Oracleのすべてのテーブル制約を無効にする

    4. MS SQL Server ManagementStudioを使用せずにSQLServerのデフォルトデータベースを変更するにはどうすればよいですか?