sql-server-2005 - 如何在Xquery中从xml中检测一串数据

标签 sql-server-2005 xquery

我在 Sql Server 数据库中有一个未类型化的 XML 列,它包含诸如

之类的值
 1
 <root><a>123</a></root>
 <root>23d</root>
 23

我正在尝试以下查询

declare @x xml
set @x='1'
select @x.exist('xs:int(.)')

但这里的问题是 exist 函数将返回 1 即使 @x='<root><a>12</a></root>'

在这种情况下,我希望输出为“0”。

有出路吗?

最佳答案

如果 XQuery 表达式的计算结果为非空节点列表,.exist() 方法返回 1,否则返回 0。因此在您的示例中每次都会返回 1。

如果我没理解错的话,你希望它在值只是整数时返回 1,而在它是 XML 时返回 0?

在这种情况下,您需要执行以下操作:

declare @x xml
set @x='<root><a>12</a></root>'
select ISNUMERIC(CAST(@x.query('/') AS nvarchar))

这应该返回 0

declare @x xml
set @x='12'
select ISNUMERIC(CAST(@x.query('/') AS nvarchar))

这应该返回 1

关于sql-server-2005 - 如何在Xquery中从xml中检测一串数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/568990/

相关文章:

sql - 将excel文件保存在sql server中的数据类型?

SQL Server BIGINT 或 DECIMAL(18,0) 主键

sql-server - 在 Sql Server 2005 中通过游标更新 View (使用替代触发器)时出现性能问题

sql - 链接服务器 SQLNCLI 问题。 "No transaction is active"

java - 我如何从java中的xquery获取json?

sql-server-2005 - 为什么在 SQL Server 2005 中无法在不锁定整个表的情况下插入/更新数据?

sql-server - 将 XML 从一种格式转换为另一种格式

xml - BaseX 8.2 中带有元素节点测试的 XQuery 文档节点测试会在根元素之前出现注释时抛出异常。为什么?

xquery - 如何使用 sum() 将空值处理为 0?

xpath - XQuery/XPath "except"操作 - 选择不在其他序列中的序列部分