如何在Xquery中检测xml中的数据字符串

时间:2009-02-20 10:09:47

标签: 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(.)')

但是这里问题是存在即使@x='<root><a>12</a></root>'

,函数也会返回1

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

有出路吗?

2 个答案:

答案 0 :(得分:3)

如果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

答案 1 :(得分:0)

XQuery中的内置类型测试怎么样?

. instance of xs:integer

如果上下文项是整数,则会给出布尔值true,否则为false。