上下文: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
Run Code Online (Sandbox Code Playgroud)
此查询导致以下错误:
将nvarchar值'test'转换为数据类型int时转换失败.
内部查询使用'test'id值删除行,因此'in'不应包含它.为什么SQL Server仍在尝试转换它?
我错过了什么吗?我怎么能绕过这个?
PS我试过WHERE CAST(in.id AS INTEGER) BETWEEN 10 AND 15
但也没用.