我已经注意到NZSQL和'nzunload'只是截断了双精度列的Mantissa值。这是问题:
从table1选择 tot_amt
;
tot_amt
~~~~~~~
123.124
567.678
当我使用其他客户(例如Aginity进行数据分析)时 - 我获得的输出是
tot_amt
~~~~~~~
123.1240535
567.6780122
还发现,当Netezza在3个Mantissa数字之后遇到0时,我发现了"截断" 。
我们试图将此DB迁移到Oracle,因此由于这个问题,整个项目都搞砸了,客户不信任我们的迁移脚本。有人遇到这个问题吗?唯一的解决方法,即使是FRMO IBM工程师也是将其施放TO_CHAR( '999,999.999', col )
,如果我必须在数十亿行进行操作,这将杀死卸载脚本。
我可以重现此问题,其中我的表格用column创建为float(6),例如:
USERDB.USER(USER)=> create table ZZ (
USERDB.USER(USER)(> YY FLOAT(6)
USERDB.USER(USER)(> );
CREATE TABLE
USERDB.USER(USER)=> insert into ZZ (yy) values (123.123456789);
INSERT 0 1
USERDB.USER(USER)=> insert into ZZ (yy) values (12.123456789);
INSERT 0 1
USERDB.USER(USER)=> select * from ZZ;
YY
---------
123.123
12.1234
(2 rows)
USERDB.USER(USER)=> select CAST ( YY as FLOAT(15) ) from ZZ;
?COLUMN?
----------------
123.1234588623
12.123399734497
(2 rows)
USERDB.USER(USER)=>
我可以将列值投放到更宽的类型,但是我看到的问题是我插入的值与返回的值不同。如果我也使用Aginity查询,则值不正确,也是如此。
检查表1中" tot_amt"列的精度(和比例),我想用于存储值的数据类型很小(float(6)也许?),NZSQL告诉您执行的正确值通过数据类型。