[DB2]DB2中的数值类型
在DB2数据库的使用过程中,遇到一个问题:
一数据表的列设置为DECIMAL(20,5)
但是存入的数据可能是2.1,也可以是2.212这样精度不确定,存储时数据库会全部自动补齐5位小数。
经过一番搜索和群里的问询,最终发现可以使用DECFLOAD类型替换DECIMAL类型。主要说明(来源于百度百科)如下:
DECFLOAT
DECFLOAT 是 DB2 9.5 引入的一种新的数据类型,它是一种十进制浮点数据类型,适合处理精确的十进制业务数据。浮点数据类型例如 REAL 和 DOUBLE 类型都只是通过二进制近似方式来处理十进制数据,所以它们不适合大部分使用十进制数据的商业应用。
DECFLOAT 合并了 DECIMAL 类型的精度和 FLOAT 类型的一些性能优势,所以它是一种结果精确而且处理高效的数据类型。
DECFLOAT 提供 16 位和 34 位两种精度的浮点数据类型。分别为表示为 DECFLOAT(16) 和 DECFOAT(34)。如果没有指明精度,DECFLOAT 默认为 DECFLOAT(34)。这两种精度的数据分别存储在 8 字节和 16 字节的空间里。
编辑本段DECFLOAT &DECIMAL
下面这个例子来说明 DECFLOAT 类型和 DECIMAL 类型的不同
CREATE TABLE EMPLOYEE (
SALARY DEC(14,2),
BONUS DECFLOAT(16),
COMMISSION DECFLOAT(34)
);
INSERT INTO EMPLOYEE VALUES (
123456.78,
1234567890.12,
123456789012345678901234.56
);
SALARY
|
BONUS
|
COMMSSION
|
123456.78
|
1234567890.12
|
123456789012345678901234.56
|
如果我们插入精度更大的数据,对于 BONUS 和 COMMISSION 这两列,我们不需要作任何更改,而对于 SALARY 列,那就需要修剪数据使得数据符合 DECIMAL 列指明的精度。结果如下:
INSERT INTO EMPLOYEE VALUES (
123456.7891,
1234567890.1234,
123456789012345678901234.5678
);
SALARY
|
SALARY
|
COMMISSION
|
123456.78
|
1234567890.1234
|
123456789012345678901234.5678
|