2014-06-11 46 views
1

我有一個包含大數字(超過20位數字)的浮點型字段。然後我想將它轉換爲varchar,而不是四捨五入。我嘗試了幾個查詢,但沒有。如何將大數字轉換爲Teradata中的varchar

這裏是一個例子:

SELECT CAST(A AS VARCHAR(25)) AS B 
    , TRIM(TRAILING '.' FROM CAST(CAST(A AS DECIMAL(25)) AS VARCHAR(25))) AS C 
    , TRIM(LEADING '0' FROM CAST(CAST(A AS FORMAT '9(25)') AS VARCHAR(25))) AS D 
FROM (SELECT CAST(79999999999999999999.000 AS FLOAT) A) t0 

而結果

B : 8.00000000000000E 019 
C : 80000000000000000000 
D : 80000000000000000000 

我期望得到 '79999999999999999999'

任何建議表示讚賞。

回答

0

當您運行SELECT CAST(79999999999999999999.000 AS FLOAT)時,您會得到80.000.000.000.000.000.000,000。 FLOAT的精確度是15到16位數字,您的輸入有20位有效數字,所以在類型轉換過程中它已經被舍入了。

由於您不能在Teradata FLOAT中存儲這樣的數字,問題是:「float-type-field」從哪裏來?甲骨文?

是否知道最大值n小數位數?然後CASTing作爲DECIMAL(38,n)可能沒問題。

你的TD版本是什麼? 14引入了NUMBER數據類型以便從Oracle輕鬆移植。

NUMBER可能被用作「浮動式字段」, 38位數字。

+0

t0表爲Teradata,A存儲爲float類型。我只是再次檢查數據,並且在提出問題時我錯了。 A在t0上的值是80000000000000000000.000而不是79999999999999999999.000。其他值爲1686287825877540.00000000; 8223372036854780000.00000000。在源文件中,第16位不是零。正如你所說,問題在於數據類型。謝謝@dnoeth – nurandi