Sql server 如何确定字段是否为数字并在同一where子句中转换
我有以下简单的sql语句Sql server 如何确定字段是否为数字并在同一where子句中转换,sql-server,Sql Server,我有以下简单的sql语句 SELECT TOP 1000 * FROM CallRecords where clientId = 4 and resultcodeId > 1 and ISNUMERIC(extension) = 1 and Convert(int,extension) > 72320 and Convert(int,extension) < 73000 显然,一个扩展包含“b01004957003” 但是,我认为sql会在ISNUME
SELECT TOP 1000 *
FROM CallRecords
where clientId = 4 and
resultcodeId > 1 and
ISNUMERIC(extension) = 1 and
Convert(int,extension) > 72320 and Convert(int,extension) < 73000
显然,一个扩展包含“b01004957003”
但是,我认为sql会在ISNUMERICextension=1之后停止检查
有什么线索吗?尝试将转换保留在外部查询中
SELECT *
FROM (SELECT TOP 1000 *
FROM CallRecords
WHERE clientId = 4
AND resultcodeId > 1
AND Isnumeric(extension) = 1) A
WHERE CONVERT(INT, extension) > 72320
AND CONVERT(INT, extension) < 73000
不要在where子句中使用isnumeric,而应使用用例。当ISNUMERICextension时选择Case,然后。。在此处使用转换扩展名。。其他的EndFrom:作为一名开发人员,您必须意识到SQL Server不像其他编程语言那样进行短路,您无法强迫它进行短路。显然。。。。如果clientId或resultcodeID是varchar,那么它们也可能包含该值并失败。发布每个相关列的数据类型。SQL按照查询计划的顺序进行操作,这可能会随着执行的不同而有所变化。这里的扩展是违规者,它包含错误数据,clientId和ResultCodeId是int
SELECT *
FROM (SELECT TOP 1000 *
FROM CallRecords
WHERE clientId = 4
AND resultcodeId > 1
AND Isnumeric(extension) = 1) A
WHERE CONVERT(INT, extension) > 72320
AND CONVERT(INT, extension) < 73000