我在本网站的其他地方看到了类似的问题,但更多的是在优化的背景下.
我在WHERE子句中执行条件的顺序有问题.我有一个存储代码的字段,其中大部分是数字,但其中一些包含非数字字符.我需要对数字代码执行一些操作,如果尝试非数字字符串,将导致错误.我想做点什么
WHERE isnumeric(code) = 1
AND CAST(code AS integer) % 2 = 1
Run Code Online (Sandbox Code Playgroud)
有没有办法确保isnumeric()首先执行?如果没有,我收到错误......
提前致谢!
保证唯一的评估顺序是 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)
根据您的需要,您可能会发现这些替代品更可取.