检查无效值sql

时间:2015-02-26 16:53:28

标签: sql sql-server-2008

我有一个存储过程,我有条件检查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列中存在无效值(非数字),那么我想忽略该记录。我上面的解决方案是好的吗?或者有更好的解决方案吗?

1 个答案:

答案 0 :(得分:2)

在这种特定情况下,您也可以使用

WHERE
LEFT(RatingCode, 1) IN ('1','2','3') AND

除此之外,tsql还允许进行字符串比较。

WHERE
LEFT(RatingCode, 1) BETWEEN '1' AND '3' AND

这不会为非数字字母引发错误。