SQL NUMERIC型は高精度数値を扱うデータ型 桁数と丸め位置の指定が可能
  • facebookページ
  • twitterページ
  • 2020.05.30

    SQL NUMERIC型は高精度数値を扱うデータ型 桁数と丸め位置の指定が可能

    SQLのNUMERIC型についてまとめてます。

    NUMERICは大きな桁数の数値を格納できるデータ型

    NUMERICはSQL ServerやPostgreSQLで扱うことのできるデータ型です。SQL ServerのNUMERIC型は最大38桁までの大きな数値をあらわすことが可能でOracleのNUMBER型に似ています。

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

    PostgreSQLのNUMERIC型も大きな数値を格納できるデータ型ですが、取り扱い可能な桁数は10万桁以上の数値が取り扱い可能です。

    NUMERIC型は大きな桁数の数値を格納することができる数値型。通貨金額や正確性が求められる数を保存する場合に使われます。ただし、NUMERIC型に対する算術演算は整数型や浮動小数点データ型に比べると非常に遅くなります。

    NUMERIC型の最大桁数は 131,072桁の整数部と16,383桁の小数部。以下の例は、numeric型のカラムを持つテーブルtbl1に、整数部20桁、小数部20桁の数値をinsertしたものです。

    無指定でnumericと記述すると最大桁数格納できますが、numeric(p,s)で最大p桁、小数点第s位で丸め処理(s+1位で四捨五入)という指定になります。

    また、decimal型というデータ型がありますが、これはNUMERIC型の別名と考えて良いでしょう。decimal型でテーブルをcreateするとNUMERIC型に変換されます。

    numericのフォーマット変換サンプル

    numeric型は、to_char関数にフォーマット文字列を指定することでカンマ区切りやゼロパディング(0詰)が可能です。

    参考)PostgreSQL公式ドキュメント データ型フォーマッティング関数

    Numeric型のデータ変換でoverflowが起こるケース

    numeric(4,1)は整数部+小数部合わせた最大桁数が4、丸め処理をおこなって小数第1位までが有効になることを表しています。-999.9~999.9までの数値が扱えるんですね。

    範囲外の数値をinsertしようとすると、numeric field overflowエラーが出よくされます。なお、丸め処理をおこなった結果最大桁数を超えてしまった倍位にも、同様のエラーが出力されます。

    まとめ

    ポテパンダの一言メモ
    • NUMERICは大きな数値を扱えるデータ型。PostgreSQLやSQL Serverで使える。
    • 特にPostgreSQLでは、10万桁を超える大きな桁数の数値の扱いが可能。
    • NUMERIC型はto_char関数にフォーマット文字列を指定することでカンマ区切りや0パディングでの出力ができる。


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

    この記事をシェア

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









    ABOUT US

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

    READ MORE