Sql将列解析为int并检查它是否在范围内

时间:2011-09-09 09:47:00

标签: sql sql-server entity-attribute-value

我使用了来自here的最高投票回答来检查单元格值是否为整数。但我还需要对它进行范围检查。

SELECT * FROM Table
WHERE (dbo.IsInteger(FieldName) = 1) AND FieldName > 400 AND FieldName < 500

但是这会返回转换错误,因为列中的某些单元格包含文本。那么,是否有可能获得一个子集,这只是IsInteger查询的结果,然后对结果进行范围检查?

1 个答案:

答案 0 :(得分:3)

您需要将其包装在CASE表达式中。我稍微修改了查询以使用BETWEEN来避免重复表达式。

SELECT * FROM Table
WHERE CASE WHEN dbo.IsInteger(FieldName) = 1 
           THEN FieldName END BETWEEN 401 AND 499

NULLdbo.IsInteger(FieldName) <> 1谓词不匹配时,表达式的结果为BETWEEN

当然这是完全无法解决的,但原始查询也是如此。