我有一个存储过程,我有条件检查where子句中的Rating Code是1,2还是3。像这样:
WHERE
CONVERT(INT, LEFT(RatingCode, 1)) IN (1,2,3) AND
当RatingCode列中存在错误值时,上面的行会引发错误。因此我提出了以下解决方案:
WHERE
CASE WHEN ISNUMERIC(LEFT(RatingCode, 1)) = 1
THEN CASE WHEN CONVERT(INT, LEFT(RatingCode, 1)) IN (1,2,3)
THEN 1
ELSE 0
END
ELSE 0
END = 1 AND
如果RatingCode列中存在无效值(非数字),那么我想忽略该记录。我上面的解决方案是好的吗?或者有更好的解决方案吗?
答案 0 :(得分:2)
在这种特定情况下,您也可以使用
WHERE
LEFT(RatingCode, 1) IN ('1','2','3') AND
除此之外,tsql
还允许进行字符串比较。
WHERE
LEFT(RatingCode, 1) BETWEEN '1' AND '3' AND
这不会为非数字字母引发错误。