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