将数字转换为 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 的格式选项。
太简单了这里是说明一切的例子
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 的格式选项。