我使用了来自here的最高投票回答来检查单元格值是否为整数。但我还需要对它进行范围检查。
SELECT * FROM Table
WHERE (dbo.IsInteger(FieldName) = 1) AND FieldName > 400 AND FieldName < 500
但是这会返回转换错误,因为列中的某些单元格包含文本。那么,是否有可能获得一个子集,这只是IsInteger
查询的结果,然后对结果进行范围检查?
答案 0 :(得分:3)
您需要将其包装在CASE
表达式中。我稍微修改了查询以使用BETWEEN
来避免重复表达式。
SELECT * FROM Table
WHERE CASE WHEN dbo.IsInteger(FieldName) = 1
THEN FieldName END BETWEEN 401 AND 499
当NULL
与dbo.IsInteger(FieldName) <> 1
谓词不匹配时,表达式的结果为BETWEEN
。
当然这是完全无法解决的,但原始查询也是如此。