我在 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/