是否有更好的方法来编写此查询以短路第二个条件?

时间:2011-12-10 07:10:36

标签: sql sql-server performance

以下类似于我需要将字段转换为类型并对其进行评估的查询,并且我想忽略具有无法转换为目标数据类型的数据的行。

select * from MyTable
where case when isnumeric(SomeField) = 1 then SomeField else null end > 1

因此,在上面的示例中,我能够测试大于1的值,同时避免在SomeField中存在任何非数字字段时可能导致的转换错误。我对这个解决方案没问题,但我只是想知道是否有更好的方法来做到这一点?

2 个答案:

答案 0 :(得分:1)

我使用查询中的where条件得到错误 “超出最大整数值” 。虽然,我的数据库中有一些非常大的数字,但这可能不适合你。

下面列出了处理大数字的替代方案:

where isnumeric(SomeField) = 1 and convert(numeric(18,0),SomeField) > 1

isnumeric()检查必须在 convert()之前。

表现明智,他们差不多。

答案 1 :(得分:1)

我得出的结论是没有更好的方法来做到这一点。