case语句去掉字符并比较值

时间:2011-09-06 15:13:32

标签: tsql case

以下是我的案例陈述。哪个工作正常。

 WHEN ISNUMERIC(ldd.Value) = 0 
                                    THEN 'NOTHING'
                    WHEN CONVERT(DECIMAL,ldd.Value) > 9 
                                    THEN 'HIGH'
                    WHEN CONVERT(DECIMAL,ldd.Value) < 7.0 
                                    THEN 'LOW'
                    WHEN CONVERT(DECIMAL,ldd.Value) BETWEEN 7.0 AND 9.0 
                                    THEN 'MEDIUM'
                    WHEN ISNULL(ldd.Value,'') = '' 
                                    THEN 'NOTHING'
    END CASE_STATEMENT

coloumn Value的值类似于

Value         CASE_STATEMENT
7.3              MEDIUM
9.2              HIGH
8.4              MEDIUM
9.1%             NOTHING
6.1              LOW
8.0              LOW
5.9%             NOTHING

我如何才能获得这些%的限制并将其转移到各自的桶中。例如,9.1%应为HIGH,5.9%为LOW。

更改结果
 Value         CASE_STATEMENT
    7.3              MEDIUM
    9.2              HIGH
    8.4              MEDIUM
    9.1%             HIGH
    6.1              LOW
    8.0              LOW
    5.9%             LOW

2 个答案:

答案 0 :(得分:0)

尝试此操作,假设您正在使用的RDBMS中存在REPLACE函数(SQL Server)或某些等效函数。

WHEN ISNUMERIC(REPLACE(ldd.Value, '%', '')) = 0 
                                    THEN 'NOTHING'
                    WHEN CONVERT(DECIMAL,REPLACE(ldd.Value, '%', '')) > 9 
                                    THEN 'HIGH'
                    WHEN CONVERT(DECIMAL,REPLACE(ldd.Value, '%', '')) < 7.0 
                                    THEN 'LOW'
                    WHEN CONVERT(DECIMAL,REPLACE(ldd.Value, '%', '')) BETWEEN 7.0 AND 9.0 
                                    THEN 'MEDIUM'
                    WHEN ISNULL(ldd.Value,'') = '' 
                                    THEN 'NOTHING'
    END CASE_STATEMENT

答案 1 :(得分:0)

似乎就是VarChar存储 - 您必须使用REPLACE来获取%out然后转换为数字类型才能进行范围比较

Select Cast (Replace (Value, '%', '') as Float)

为了便于使用,我会考虑使用派生表

Select Value,
    Case when Value = 0 Then 'Nothing' 
     when Value > 9 Then 'HIGH' 
     when Value < 7 Then 'LOW' 
     when Value BETWEEN 7.0 AND 9.0  Then 'MEDIUM' 
    End
From
(
    Select Cast (Replace (Value , '%', '') as Float) as Value
    From
    (
        Select '7.3' as Value
        Union Select '9.2'
        Union Select '8.4'
        Union Select '9.1%'
        Union Select '6.1'
        Union Select '8.0'
        Union Select '5.9%'
        Union Select ''
    ) Value_Raw
) Value_Converted