簡體   English   中英

netezza雙精度輸出可截斷小值

[英]netezza Double Precision Output Truncates Vaules

我注意到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 )如果我必須執行數十億行TO_CHAR( '999,999.999', col )這將TO_CHAR( '999,999.999', col )卸載腳本。

當我有一個以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告訴您數據強制執行的正確值類型。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM