如何在Teradata中将big-number转换为varchar

How to convert big-number to varchar in Teradata

提问人:nurandi 提问时间:6/11/2014 更新时间:11/10/2023 访问量:8516

问:

我有一个包含大数字(超过 20 位数字)的浮点型字段。然后我想将其转换为 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”

任何建议都是值得赞赏的。

铸造 Teradata

评论


答:

0赞 dnoeth 6/11/2014 #1

当你运行时,你会得到结果。FLOAT 的精度为 15 到 16 位,您的输入有 20 位有效数字,因此在类型转换期间已经四舍五入。SELECT CAST(79999999999999999999.000 AS FLOAT)80.000.000.000.000.000.000,000

由于您不能在 Teradata FLOAT 中存储这样的数字,因此问题是:这个“浮点型字段”从何而来?神谕?

小数位有已知的最大值 n 吗?那么 CASTing 作为 DECIMAL(38,n) 可能没问题。

你们的TD版本是什么?14 引入了 NUMBER 数据类型,以便从 Oracle 轻松移植。

NUMBER 可以用作大约 38 位数字的“浮点型字段”。

评论

0赞 nurandi 6/12/2014
t0 表是 Teradata,A 以浮点类型存储。我刚刚再次检查了数据,在提问时我确实犯了错误。t0 上 A 的值是 8000000000000000000000.000,而不是 7999999999999999999999.000。其他值为 1686287825877540.00000000;8223372036854780000.00000000. 在源文件中,第 16 位数字不为零。正如你所说,问题在于数据类型。谢谢@dnoeth