带有 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