在将数字转换为varchar后,0位数消失

时间:2015-05-19 13:08:23

标签: sql casting teradata

这里简单易事就是说明一切的例子

select cast('0.0000' as numeric(26,4)) -- returns 0.0000 as should
select cast(cast('0.0000' as numeric(26,4)) as  varchar (32)) -- returns .0000

但是

select cast(cast('1.0001' as numeric(26,4)) as  varchar (32)) -- returns 1.0001

如何在没有case语句的情况下保存0或者它是唯一的方法?为什么会这样?

1 个答案:

答案 0 :(得分:2)

CAST到VARCHAR基于列的FORMAT(类似COBOL):

select cast('0.0000' as numeric(26,4));

'--(22).9(4)'

- >在第一个实际需要的数字(最多可选22位数)和4个小数位之前的浮动减号,但您需要至少一位数加上4位小数。

在列级别或此特定查询中更改:

select cast(cast('0.0000' as numeric(26,4) FORMAT '-(22)9.9(4)') as  varchar (32));

0.0000

9表示数字,例如9(10)将是带有前导零的10位数字。

请参阅Teradata手册中的Datatypes and Formats

顺便说一句,如果您了解Oracle语法并且您正在运行TD14 +,那么您也可以使用包含大多数Oracle格式选项的TO_CHAR。