Tsql case语句去掉字符并比较值

Tsql case语句去掉字符并比较值,tsql,case,Tsql,Case,下面是我的案例陈述,效果很好 WHEN ISNUMERIC(ldd.Value) = 0 THEN 'NOTHING' WHEN CONVERT(DECIMAL,ldd.Value) > 9 THEN 'HIGH' WHEN CONVERT(DECIMAL,ldd

下面是我的案例陈述,效果很好

 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
我怎样才能把那些%的钱拨出来,放到他们各自的桶里。例如,9.1%应在高位,5.9%在低位。在中更改结果

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

试试这个,假设您正在使用的RDBMS中有一个替换函数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

这似乎是VarChar存储—您必须使用REPLACE将%取出,然后转换为数字类型以进行范围比较

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

是否替换ldd.值“%”?但您需要缓存它以在CASE语句中访问,以避免复制粘贴和性能问题
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