【问题标题】:Case statement int to string conversionCase 语句 int 到字符串的转换
【发布时间】:2013-11-08 16:32:46
【问题描述】:

我正在使用 db2 数据库。我需要一个case语句,它将每行“-1”转换为“N/A”。其余行必须格式化为百分比。我的查询如下:

 SELECT
 case when sopm.TARGET_VALUE = '-1000'
        then   'N/A'
        ELSE sopm.TARGET_VALUE
        END as TARGET_VALUE
 FROM SUMMARY_PERFORMANCE_METRIC sopm

数据如下

3.5000  
 0.8000  
 0.8500  
 0.8000  
 0.2000  
 0.0500  
 -1.0000  
 -1.0000  
 0.9500  
 0.9000  
 0.4000  
 -1.0000

上面的脚本没有产生错误,但也没有给我正确的结果。

想要的输出:

3.5
 80%
 85%
 80%
 20%
 5%
 N/A
 N/A
 95%
 90%
 40%
 N/A

【问题讨论】:

  • 这个“数据”的输出应该如何?
  • 我编辑了问题以反映预期的结果。
  • 你现在得到的输出有什么问题?
  • 我在“-1.0000”的结果中没有得到“N/A”,我不确定如何在案例陈述中格式化百分比

标签: sql db2 case type-conversion


【解决方案1】:

我还没有尝试过这段代码,但这样的东西应该可以工作:

SELECT
case when CONVERT(FLOAT, sopm.TARGET_VALUE),  <= '-1'
    then   'N/A'
    ELSE CONVERT(VARCHAR(10),CONVERT(INT, sopm.TARGET_VALUE * 100)) + '%'
    END as TARGET_VALUE
FROM SUMMARY_PERFORMANCE_METRIC sopm

如果你想要百分比中的小数位,或者像这样:

SELECT
case WHEN sopm.TARGET_VALUE  <= -1
    THEN   'N/A'
WHEN sopm.TARGET_VALUE  >= 1
THEN sopm.TARGET_VALUE
    ELSE CONVERT(VARCHAR(10),CONVERT(NUMERIC(18,2), sopm.TARGET_VALUE * 100)) + '%'
    END as TARGET_VALUE
FROM SUMMARY_PERFORMANCE_METRIC sopm

我知道您可能已经完成了这个,但我只是编辑了我的答案的第二个示例,以展示它如何处理 3.5。

【讨论】:

  • 感谢您的回复。任何一个答案都可以被认为是正确的,但我选择使用 cast 而不是 convert。最初使用转换收到 -206 无效对象错误。当结果 >= 1(3.5 而不是 350%)时,不确定如何处理异常。
【解决方案2】:

试一试,它会在案例中为您添加百分比符号并格式化您的百分比。

SELECT  CASE
            WHEN spom.TARGET_VALUE LIKE('-1.%') THEN 'N/A'
            ELSE STR(CONVERT(VARCHAR, CONVERT(DECIMAL(18,2), spom.TARGET_VALUE) * 100), 2, 0) + '%'
        END AS TARGET_VALUE
FROM    SUMMARY_PERFORMANCE_METRIC spom

使用这个和一些数据作为测试给了我这个结果......

TARGET_VALUE
N/A
40%
90%

【讨论】:

  • 但是您是否查看了示例测试数据 3.5000 给出的结果为 3.5,而不是 3500%
猜你喜欢
  • 1970-01-01
  • 2017-01-08
  • 2011-09-12
  • 1970-01-01
  • 2019-11-26
  • 2013-01-09
  • 1970-01-01
  • 2012-05-04
  • 1970-01-01
相关资源
最近更新 更多