Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 如何确定字段是否为数字并在同一where子句中转换_Sql Server - Fatal编程技术网

Sql server 如何确定字段是否为数字并在同一where子句中转换

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

我有以下简单的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会在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