2016-06-23 56 views
0

我注意到,nzsql和'nzunload'只是截斷雙精度列的尾數值。問題如下:netezza雙精度輸出截斷Vaules

select 1 from tot_amt from table1;

tot_amt 
~~~~~~~  
123.124  
567.678 

而當我用其他客戶一樣Aginity的數據分析 - 輸出我得到的是

tot_amt 
~~~~~~~ 
123.1240535 
567.6780122 

此外,我已經找到了「截斷」 當Netezza公司遇到0後3個尾數發生。

我們正試圖將這個數據庫遷移到oracle,並且由於這個問題,整個項目都搞砸了,客戶端不相信我們的遷移腳本。有沒有人遇到過這個問題?唯一的解決方法,即使是frmo IBM工程師也會將其投入TO_CHAR('999,999.999', col)如果我必須爲數十億行執行此操作,這將終止卸載腳本。

+1

請提供表格和netezza版本的ddl。你寫過的唯一問題是「有沒有人遇到過這個問題?」我可以說「我沒有」並正確粘貼nzsql報告雙精度列的示例,但這可能不是一個有用的答案。 – ScottMcG

回答

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告訴你正確的值爲由數據類型強制執行。