十进制函数和运算符

十进制字面量

使用 DECIMAL 'xxxxxxx.yyyyyyy' 语法定义 DECIMAL 类型的字面量。

字面量的 DECIMAL 类型精度将等于字面量中数字的个数(包括尾随零和前导零)。比例将等于小数部分中数字的个数(包括尾随零)。

示例字面量

数据类型

DECIMAL '0'

DECIMAL(1)

DECIMAL '12345'

DECIMAL(5)

DECIMAL '0000012345.1234500000'

DECIMAL(20, 10)

二进制算术十进制运算符

支持标准数学运算符。下表解释了结果的精度和比例计算规则。假设 x 的类型为 DECIMAL(xp, xs)y 的类型为 DECIMAL(yp, ys)

运算

结果类型精度

结果类型比例

x + y

x - y

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

max(xs, ys)

x * y

min(38, xp + yp)

xs + ys

x / y

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

max(xs, ys)

x % y

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

max(xs, ys)

如果运算的数学结果不能用结果数据类型的精度和比例精确表示,则会引发异常条件 - Value is out of range

当对具有不同比例和精度的十进制类型进行运算时,值首先会强制转换为一个共同的超级类型。对于接近可表示最大精度(38)的类型,当其中一个操作数不适合共同的超级类型时,这会导致 Value is out of range 错误。例如,decimal(38, 0) 和 decimal(38, 1) 的共同超级类型是 decimal(38, 1),但适合 decimal(38, 0) 的某些值不能表示为 decimal(38, 1)。

比较运算符

所有标准比较运算符和 BETWEEN 运算符都适用于 DECIMAL 类型。

一元十进制运算符

The - 运算符执行否定。结果类型与参数类型相同。