Case语句int到字符串转换

时间:2013-11-08 16:32:46

标签: sql db2 case type-conversion

我正在使用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

2 个答案:

答案 0 :(得分:3)

我没有尝试过这段代码,但是这样的事情应该有效:

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。

答案 1 :(得分:1)

尝试一下,它会在案例中为您添加百分号以及格式化您的百分比。

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%