带有 CAST 的 Teradata CASE
Teradata CASE with CAST
我有以下声明。我的期望是,如果价格小于 1.00 则显示 4 位有效数字,否则显示 2.
Select CAST(10.99 AS DECIMAL(38,4)) C
, CAST(10.99 AS DECIMAL(38,2)) D
, CAST(1 AS DECIMAL(38,4)) AS LESS
, CAST(1 AS DECIMAL(38,2)) AS GREATER
, (CASE
WHEN CAST(10.99 AS DECIMAL(38,4)) < CAST(1 AS DECIMAL(38,4)) THEN
CAST(10.99 AS DECIMAL(38,4))
ELSE CAST(10.99 AS DECIMAL(38,2))
END) AS PRICE_FORMATTED
FROM MY_PRICE_TBL ;
给出以下结果:
C D LESS GREATER PRICE_FORMATTED
10.9900 10.99 1.0000 1.00 10.9900
我在此示例中明确转换所有内容,以表明正确转换了 LESS 和 GREATER 列,但格式设置错误。我希望 PRICE_FORMATTED 值与 Col D
中的值相同
什么给了?
PRICE_FORMATTED
是与D
相同的值,只是小数精度不同。
A CAST returns 单个列并且此列具有数据类型。当 WHEN 返回不同的数据类型时,解析器选择最佳匹配。当然一个小数(38,4)和(38,2)是不同的,然后使用小数位数更高的那个。
您可以尝试不显示尾随零的 NUMBER 数据类型,但 10.9000
也会显示为 10.9
。
我有以下声明。我的期望是,如果价格小于 1.00 则显示 4 位有效数字,否则显示 2.
Select CAST(10.99 AS DECIMAL(38,4)) C
, CAST(10.99 AS DECIMAL(38,2)) D
, CAST(1 AS DECIMAL(38,4)) AS LESS
, CAST(1 AS DECIMAL(38,2)) AS GREATER
, (CASE
WHEN CAST(10.99 AS DECIMAL(38,4)) < CAST(1 AS DECIMAL(38,4)) THEN
CAST(10.99 AS DECIMAL(38,4))
ELSE CAST(10.99 AS DECIMAL(38,2))
END) AS PRICE_FORMATTED
FROM MY_PRICE_TBL ;
给出以下结果:
C D LESS GREATER PRICE_FORMATTED
10.9900 10.99 1.0000 1.00 10.9900
我在此示例中明确转换所有内容,以表明正确转换了 LESS 和 GREATER 列,但格式设置错误。我希望 PRICE_FORMATTED 值与 Col D
中的值相同什么给了?
PRICE_FORMATTED
是与D
相同的值,只是小数精度不同。
A CAST returns 单个列并且此列具有数据类型。当 WHEN 返回不同的数据类型时,解析器选择最佳匹配。当然一个小数(38,4)和(38,2)是不同的,然后使用小数位数更高的那个。
您可以尝试不显示尾随零的 NUMBER 数据类型,但 10.9000
也会显示为 10.9
。