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 此查询会导致以下错误:
内部查询消除了具有’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). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |