netezza双精度输出截断Vaules

时间:2016-06-23 15:36:57

标签: export netezza mantissa

我注意到nzsql和' nzunload'只是截断双精度列的尾数值。这是问题所在:

从table1中选择tot_amt;

tot_amt
~~~~~~~    
123.124    
567.678

当我使用像Aginity这样的其他客户进行数据分析时 - 我得到的输出是

tot_amt
~~~~~~~
123.1240535
567.6780122

此外,我还发现了“截断”字样。 在netezza遇到3个尾数后的数字时发生。

我们正在尝试将此数据库迁移到oracle,并且由于此问题,整个项目都是混乱的,客户端不信任我们的迁移脚本。有没有人遇到过这个问题?唯一的解决方法,甚至是IBM工程师将其强制转换为TO_CHAR( '999,999.999', col )如果必须为数十亿行执行此操作,这将终止卸载脚本。

1 个答案:

答案 0 :(得分:0)

我可以重现这个问题,我有一个用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进行查询,则值也是如此。

检查table1中'tot_amt'列的精度(和比例),我猜用于存储值的数据类型非常小(可能是FLOAT(6)?),NZSQL告诉你正确的值为强制执行按数据类型。