将数字转换为 varchar 0 数字后消失

After casting numerical as varchar 0 digit disappears

太简单了这里是说明一切的例子

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 或者这是唯一的方法?为什么会这样?

转换为 VARCHAR 是基于列的格式(类似于 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+,您还可以使用 TO_CHAR,包括大多数 Oracle 的格式选项。