我有一个案例陈述,我想写一个单独的条款,每个条款高低中等和无。
CASE
WHEN (ISNUMERIC(REPLACE(ldd.Value, '%', '')) = 0)
THEN 'NONE'
WHEN (CONVERT(FLOAT,REPLACE(ldd.Value, '%', '')) > 9.0)
THEN 'HIGH'
WHEN (CONVERT(FLOAT,REPLACE(ldd.Value, '%', '')) < 7.0 )
THEN 'LOW'
WHEN (CONVERT(FLOAT,REPLACE(ldd.Value, '%','')) BETWEEN 7.0 AND 9.0 )
THEN 'MEDIUM'
WHEN (ISNULL(ldd.Value,'') = '')
THEN 'NONE'
END
当我尝试为NONE
编写where子句时 SELECT class
,rollno
,Value
FROM STUDENT
WHERE (ISNUMERIC(REPLACE(ldd.Value, '%', '')) = 0)
错误MSg:将varchar数据类型转换为日期时间数据类型会导致超出范围的值。
当我写高
时 SELECT class
,rollno
,Value
FROM STUDENT
WHERE (CONVERT(FLOAT,REPLACE(ldd.Value, '%', '')) > 9.0)
错误MSg:将数据类型varchar转换为float时出错。
在where子句写入时,只能获取高低或无高的记录? 价值领域是变量
答案 0 :(得分:2)
CASE语句的评估顺序阻止您在无法转换的varchar上调用CONVERT()。您无法保证在WHERE条件下获得此保护。
答案 1 :(得分:0)
这将完全依赖于
SELECT
s.Value
,CASE WHEN REPLACE(s.Value, '%', '') BETWEEN '0.1' AND '7.0' THEN 'LOW'
WHEN REPLACE(s.Value, '%','') BETWEEN '7.0' AND '9.0' THEN 'MEDIUM'
WHEN REPLACE(s.Value, '%', '') BETWEEN '9.0' AND '100.0' THEN 'HIGH'
ELSE 'NONE'
END
FROM Student AS s