【问题标题】:netezza Double Precision Output Truncates Vaulesnetezza 双精度输出截断值
【发布时间】:2016-06-23 15:36:57
【问题描述】:

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

从表 1 中选择 tot_amt;

tot_amt
~~~~~~~    
123.124    
567.678

当我使用 Aginity 等其他客户端进行数据分析时,我得到的输出是

tot_amt
~~~~~~~
123.1240535
567.6780122

我还发现“截断”发生在 netezza 在 3 个尾数位后遇到 0 时。

我们正在尝试将这个数据库迁移到 oracle,由于这个问题,整个项目一团糟,客户不信任我们的迁移脚本。有没有人遇到过这个问题?唯一的解决方法,即使是 frmo IBM 工程师也是将其转换为 TO_CHAR( '999,999.999', col ) 如果我必须为数十亿行执行此操作,这将杀死卸载脚本。

【问题讨论】:

  • 请提供表格的ddl和netezza的版本。您所写的唯一问题是“有人遇到过这个问题吗?”我可以说“我没有”并粘贴 nzsql 正确且按预期报告双精度列的示例,但这可能不是一个有用的答案。

标签: export netezza mantissa


【解决方案1】:

我可以重现这个问题,其中我创建了一个列为 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 会告诉您强制执行的正确值按数据类型。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-10-02
    • 1970-01-01
    • 2019-03-13
    • 1970-01-01
    • 1970-01-01
    • 2019-03-06
    • 1970-01-01
    • 2017-12-18
    相关资源
    最近更新 更多