【问题标题】:Teradata CASE with CASTTeradata CASE 与 CAST
【发布时间】:2018-03-23 16:35:27
【问题描述】:

我有以下声明。我的预期是,如果价格低于 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 中的值相同

什么给了?

【问题讨论】:

    标签: teradata


    【解决方案1】:

    PRICE_FORMATTED D一样的,只是小数精度不同。

    CAST 返回单个列,并且该列具有数据类型。当 WHEN 返回不同的数据类型时,解析器会选择最佳匹配。当然小数点 (38,4) 和 (38,2) 是不同的,然后使用小数位数较高的那个。

    您可以尝试不显示尾随零的 NUMBER 数据类型,但随后 10.9000 也会显示为 10.9

    【讨论】:

    • 现在发生的原因是有道理的。谢谢。
    猜你喜欢
    • 2015-01-11
    • 2019-08-13
    • 1970-01-01
    • 2020-09-13
    • 2018-10-27
    • 2020-02-17
    • 1970-01-01
    • 2017-02-28
    • 2019-03-31
    相关资源
    最近更新 更多