SQL NUMBER型は高精度数値を扱う TO_CHARでカンマ編集、0詰めが可能
  • facebookページ
  • twitterページ
  • 2020.05.30

    SQL NUMBER型は高精度数値を扱う TO_CHARでカンマ編集、0詰めが可能

    OracleのNUMBERデータ型についてまとめてます。

    NUMBERは高精度な数値を扱うためのデータ型

    NUMBERは、整数と小数を扱える数値型。Oracleで扱うことができます。

    公式ドキュメントによると、事実上どんな大きさの数値でも格納可能となっています。最大精度は38桁。

    • 1 x 10-130~9.99…9 x 10125の範囲の正の数。最大有効桁数は38です。
    • -1 x 10-130~9.99…99 x 10125の範囲の負の数。最大有効桁数は38です。
    • 0(ゼロ)。
    • 正と負の無限大(Oracle Databaseバージョン5からのインポート時にのみ生成されます)。

    参考)Oracle公式ドキュメント Oracleデータ型

    NUMBER(3,0)という宣言は、整数部が3桁、小数部が0桁の指定になります。結果、小数点第一位で丸め処理がおこなわれ、3桁の整数となります。

    NUMBER(p,s)という宣言で、pは小数点以下を含んだ数値全体の桁数(最大38桁)、sは小数点以下の桁数を表します。

    公式ドキュメントでは、NUMBER (precision, scale) と表記されています。precisionは精度、scaleはスケール(小数点以下の桁数)です。

    参考)Oracle公式ドキュメント Oracleデータ型

    なお、宣言した桁に入りきらない大きな数をinsertしようとすると上記のエラーが出力されます。value larger than specified precision allowed for this column(この列に許容される指定精度より大きな値です)というエラーは、桁があふれてしまったことを示しています。

    また、NUMBER(p,s)の指定でsが負の数だった場合、整数部のs桁で丸め処理をおこなう指定になります。たとえば、NUMBER(10,-3)と指定すると、全体の桁は10桁で、整数部3桁で丸めを行います。

    123456.123450をinsertすると123000に丸められていることがわかります。

    数値がどのように丸められるのか見てみましょう。

    以下のSQLはテーブルtbl10をcreateし全体10桁、小数点以下2桁のカラムnumを指定します。小数点以下3桁で丸めが発生するため、insertした値はそれぞれ以下の値でテーブルに格納されます。

    • 100.99 → 100.99
    • 90.551 → 90.55
    • 88.556 → 88.56

    NUMBER型のフォーマット

    NUMBER型の数値は、TO_CHARにフォーマット指定をすることでカンマ区切りや0パディングなどの体裁を指定することが可能です。

    TO_CHAR(NUMBER型の数値,フォーマットをあらわす文字列)のように指定すると、数値をカンマ区切りしたり0詰めすることができます。

    まとめ

    ポテパンダの一言メモ
    • NUMBERは38桁の精度で整数+小数を扱うことができるデータ型
    • NUMBER(p,s)という記述で、最大桁数と丸め処理する桁を指定する。pが負の場合は整数部で丸め処理をおこなう。
    • TO_CHAR関数にフォーマット指定を記述することで、NUMBER型のフォーマット整形が可能


    優良フリーランス案件多数掲載中!
    フリーランスエンジニアの案件をお探しなら
    ポテパンフリーランス

    この記事をシェア

    • Facebookシェア
    • Twitterシェア
    • Hatenaシェア
    • Lineシェア
    pickup









    ABOUT US

    ポテパンはエンジニアと企業の最適なマッチングを追求する企業です。

    READ MORE