我有一个包含大数字(超过20位)的float-type-field。然后我想将它转换为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 :(得分: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可用作“float-type-field”。 38位数。