以下是我的案例陈述。哪个工作正常。
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
答案 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