3

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

 1
 <root><a>123</a></root>
 <root>23d</root>
 23

我正在尝试以下查询

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

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

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

有出路吗?

4

2 回答 2

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

于 2009-02-20T11:24:09.727 回答
0

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

. instance of xs:integer

如果上下文项是整数,将给您一个布尔值 true,否则为 false。

于 2009-04-30T11:29:46.640 回答