指定(T)SQL执行的顺序

stu*_*edo 1 sql t-sql where

我在本网站的其他地方看到了类似的问题,但更多的是在优化的背景下.

我在WHERE子句中执行条件的顺序有问题.我有一个存储代码的字段,其中大部分是数字,但其中一些包含非数字字符.我需要对数字代码执行一些操作,如果尝试非数字字符串,将导致错误.我想做点什么

WHERE isnumeric(code) = 1
AND CAST(code AS integer) % 2 = 1
Run Code Online (Sandbox Code Playgroud)

有没有办法确保isnumeric()首先执行?如果没有,我收到错误......

提前致谢!

Mar*_*ith 5

保证唯一的评估顺序是 CASE

WHERE 
     CASE WHEN isnumeric(code) = 1 
          THEN CAST(code AS integer) % 2 
END = 1
Run Code Online (Sandbox Code Playgroud)

也只是因为它通过isnumeric测试并不能保证它会成功cast转换为整数.

 SELECT ISNUMERIC('$') /*Returns 1*/

 SELECT CAST('$' AS INTEGER) /*Fails*/
Run Code Online (Sandbox Code Playgroud)

根据您的需要,您可能会发现这些替代品更可取.