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

Oracle NUMBERのスケールをPrecisionより大きくするにはどうすればよいですか?

    Oracleのドキュメントによると:

    これが私の見方です:

    • Precisionの場合 スケールよりも大きい(例:NUMBER(8,5) )、問題ありません。これは簡単です。 Precision つまり、数値は合計8桁で、そのうち5桁は小数部(。→)であるため、整数部(←。)は3桁になります。これは簡単です。
    • そのPrecisionが表示されたら Scaleよりも小さい (例:NUMBER(2, 5) )、これは3つのことを意味します:

      • 数値には整数部分はなく、小数部分のみが含まれます。したがって、整数部分の0は計算にカウントされません。つまり、0.12345ではなく.12345と言います。実際、整数部分に1桁だけを指定すると、常にエラーが返されます。
      • Scale 数値が持つ小数部の合計桁数を表します。この場合は5。したがって、.12345または.00098にすることができますが、合計で5桁を超えることはできません。
      • 小数部分は、有効数字とゼロの2つの部分に分けられます。有効数字はPrecisionで指定されます 、およびゼロの最小数は(Scale -Precision )。例:

      ここで、数値の小数部には最低3つのゼロが必要です。その後に2つの有効数字が続きます(ゼロもあります)。したがって、3つのゼロ+2つの有効数字=5は、Scaleです。 番号。

    簡単に言うと、たとえばNUMBER(6,9)が表示された場合 、これは、小数部分が必須の3つのゼロで始まり、6桁が続く合計9桁になることを示しています。

    ここにいくつかの例があります:

    SELECT CAST(.0000123 AS NUMBER(6,9)) FROM dual;   -- prints: 0.0000123; .000|012300
    SELECT CAST(.000012345 AS NUMBER(6,9)) FROM dual; -- prints: 0.0000123; .000|012345
    SELECT CAST(.123456 AS NUMBER(3,4)) FROM dual;    -- ERROR! must have a 1 zero (4-3=1)
    SELECT CAST(.013579 AS NUMBER(3,4)) FROM dual;    -- prints: 0.0136; max 4 digits, .013579 rounded to .0136
    


    1. MySQL-約を取得する普遍的な方法。バイト単位の行サイズ

    2. 階層表示のmysqlクエリヘルプ

    3. Oracle、先行ゼロを文字列(数値ではない)に追加

    4. いつテーブル値関数を使用しますか?