我有一个表TABLEA with COL1 NUMERIC(8,6)
,需要在第二个表TABLEB
中插入一个包含值123.000000
的值。我尝试过下面的场景。在这种情况下,我必须使用{ {1}}功能和NVL
一起
CAST
也在下面尝试
SELECT CAST(899.000000 AS NUMERIC(8,6))-- This gives Numeric overflow. Value does not fit in a numeric(8,6)
任何见解都会有所帮助。 提前谢谢。
答案 0 :(得分:0)
NUMERIC(p,s) | Exact numerical, precision p, scale s
在您的查询中,精度值为8,这就是为什么越过流量误差。实际精度值为9.
SELECT CAST(899.000000 AS NUMERIC(8,6)
我已更新您的查询,如下所示。
SELECT CAST(899.000000 AS NUMERIC(9,6))
答案 1 :(得分:0)
TABLEA.COL1
请注意以下事项:
SELECT CAST(899.00000 AS NUMERIC(8,6)) /*Overflow*/
SELECT CAST(899.00000 AS NUMERIC(8,5)) /*Works*/
SELECT CAST(899.00000 AS NUMERIC(9,6)) /*Works*/
SELECT CAST(99.123456 AS NUMERIC(8,6)) /*Works*/
SELECT CAST(100 AS NUMERIC(8,6)) /*Overflow*/
SELECT CAST(99.9999994 AS NUMERIC(8,6)) /*Works (rounds down to 99.999999)*/
SELECT CAST(99.9999995 AS NUMERIC(8,6)) /*Overflow (rounds up to 100)*/
基本上,"(8 - 6)== 2",所以numeric(8, 6)
不能存储小数点左边超过2位的任何数字。即无法存储任何数字>= 100
。
Data type | Description ------------- | ----------- DECIMAL(p,s) | Exact numerical, precision p, scale s. Example: decimal(5,2) is a number that has 3 digits before the decimal and 2 digits after the decimal NUMERIC(p,s) | Exact numerical, precision p, scale s. (Same as DECIMAL)
答案 2 :(得分:0)
重要说明: netezza中的十进制/数字数据类型存储为封面下的浮点值。因此,如果您例如,您将不会“浪费”数据库中的任何空间。从数字(7,X)到数字(14,X)或从数字(4,X)到数字(6,X)
在此处查看有关这些超级低级数据类型的更多详细信息:https://www.tutorialspoint.com/cprogramming/c_data_types.htm 请注意,内部CPU正在处理二进制数据类型(基数为2),大多数人使用基数为10的数字来讨论这些事情。其他(更详细的)解释存在于网络上,但这与此无关:)