10進数関数と演算子

10進数リテラル

DECIMAL 'xxxxxxx.yyyyyyy' 構文を使用して、DECIMAL 型のリテラルを定義します。

リテラルの DECIMAL 型の精度は、リテラルの桁数(後続ゼロと先行ゼロを含む)と同じになります。スケールは、小数部の桁数(後続ゼロを含む)と同じになります。

リテラルの例

データ型

DECIMAL '0'

DECIMAL(1)

DECIMAL '12345'

DECIMAL(5)

DECIMAL '0000012345.1234500000'

DECIMAL(20, 10)

2項演算10進演算子

標準の数学演算子がサポートされています。以下の表は、結果の精度とスケールの計算規則について説明しています。xDECIMAL(xp, xs) 型、yDECIMAL(yp, ys) 型とします。

演算

結果型の精度

結果型のスケール

x + y

および

x - y

min(38,
    1 +
      min(xs, ys) +
      min(xp - xs, yp - ys)
   )

max(xp, yp) + 1

max(xs, ys)

x * y

min(xp - ys, yp - xs)

max(xs, ys)

min(38,
    xp + ys
       + max(0, ys-xs)
   )

max(xp, yp) + 1

x / y

min(xp - xs, yp - ys) +
max(xs, bs)

max(xp, yp) + 1

x % y

演算の数学的結果が結果データ型の精度とスケールで正確に表現できない場合、例外条件が発生します - 値が範囲外です

スケールと精度が異なる10進数型で演算する場合、値は最初に共通のスーパーツール型に強制されます。表現可能な最大精度(38)に近い型の場合、オペランドのいずれかが共通のスーパーツール型に収まらない場合、値が範囲外エラーになる可能性があります。たとえば、decimal(38, 0) と decimal(38, 1) の共通のスーパーツール型は decimal(38, 1) ですが、decimal(38, 0) に収まる特定の値は decimal(38, 1) として表現できません。

比較演算子

すべての標準比較演算子と BETWEEN 演算子は、DECIMAL 型に対して機能します。

単項10進演算子