加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

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

发布时间:2020-12-12 08:40:05 所属栏目:MsSql教程 来源:网络整理
导读:上下文:SQL Server 2008 我有一个表mytable,其中包含两个NVARCHAR列id,标题. id列中的所有数据实际上是数字的,除了包含值“test”的一行. 我想得到所有的ids在10和15之间,所以我需要SQL Server将id列值转换为INTEGER. 我使用ISNUMERIC(id)= 1来消除非数值,但
上下文: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).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读