sql-server – 将nvarchar值’test’转换为数据类型int时,转换失败

前端之家收集整理的这篇文章主要介绍了sql-server – 将nvarchar值’test’转换为数据类型int时,转换失败前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
上下文:sql Server 2008

我有一个表mytable,其中包含两个NVARCHAR列id,标题.

id列中的所有数据实际上是数字的,除了包含值“test”的一行.

我想得到所有的ids在10和15之间,所以我需要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

查询会导致以下错误

Conversion Failed when converting the nvarchar value ‘test’ to
data type int.

内部查询消除了具有’test’id值的行,所以’in’不应该包含它.为什么sql Server仍然尝试转换它?

我错过了什么吗?我该怎么办?

附:我尝试在10和15之间的WHERE CAST(in.id AS INTEGER),但是也没有工作.

解决方法

我应该添加一种XML样式的方法
SELECT * 
FROM mytable
WHERE CAST(id as xml).value('. cast as xs:decimal?','int') BETWEEN 10 AND 15

将id转换为XML,转换xs中的值:decimal,然后转换为integer.如果没有数值,它将被转换为NULL.

在这里,您可以阅读关于XML类型转换规则(link).

猜你在找的MsSQL相关文章