我正在尝试执行 SQL 语句
SELECT *
FROM Menu
WHERE ISNumeric(Data) = 1
AND Data = 296
其中Data
字段可能包含数字或非数字内容。但我收到类似的语法错误
在数据类型 int 的列中转换 varchar 值“/home”时出现语法错误。
我正在尝试执行 SQL 语句
SELECT *
FROM Menu
WHERE ISNumeric(Data) = 1
AND Data = 296
其中Data
字段可能包含数字或非数字内容。但我收到类似的语法错误
在数据类型 int 的列中转换 varchar 值“/home”时出现语法错误。
由于DATA
列是 varchar,因此您需要用单引号将值 ( 296 ) 括起来
SELECT *
FROM Menu
WHERE ISNumeric(Data) = 1 AND Data = '296'
您仍然可以不使用ISNUMERIC
此处直接查询,并提高性能,因为您不必检查每条记录的数值。
我想,在你的情况下,使用IsNumeric
是没有意义的。
SELECT *
FROM Menu
WHERE Data = '296'
不幸的是,SQL 不保证短路评估,因此如果第一个条件为假,IsNumeric(Data)
过滤器不会阻止评估第二个谓词, 。Data = 296
但是,您可以做的是将比较保留为 char 文字,例如
SELECT *
FROM Menu
WHERE ISNumeric(Data) = 1
AND Data = '296';
IsNumeric
出于兴趣,如果要与精确的数值进行比较,为什么需要进行检查?
只是为了添加到@StuartLC 的答案,一种解决方法是使用子查询首先获取所有数值,例如:
SELECT *
FROM (
SELECT CAST(Data AS int) AS Data,
-- Other fields
FROM Menu
WHERE ISNumeric(Data) = 1
) subquery
WHERE subquery.Data = 296
尽管请注意,您需要确保您不会有十进制数、科学记数法或类似的东西,因为 IsNumeric 将返回1
这些。这个问题将帮助您解决与此相关的问题...