背景: SQL Server 2008
我有一张表mytable
,里面包含两列NVARCHAR
类型的列id
和title
。
id
列中的所有数据实际上都是数字,除了一行包含值“test”。
我想获取10到15之间的所有id,因此我需要SQL Server将id列的值转换为INTEGER
。
我使用ISNUMERIC(id) = 1
首先排除非数字值,但SQL Server对这个查询的处理方式很奇怪。
SELECT
in.*
FROM
(SELECT
id, title
FROM
mytable
WHERE
ISNUMERIC(id) = 1) in
WHERE
in.id BETWEEN 10 AND 15
这个查询导致以下错误:
在将nvarchar类型的值“test”转换为int数据类型时转换失败。
内部查询已经排除了具有'id'值为“test”的行,因此'in'中不应包含它。为什么SQL Server仍然尝试将其转换?
我有什么遗漏吗?我该如何解决这个问题?
附言:我尝试过WHERE CAST(in.id AS INTEGER) BETWEEN 10 AND 15
,但也没有起作用。