我在 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”。
有出路吗?
我在 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”。
有出路吗?
如果 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
XQuery 中的内置类型测试怎么样?
. instance of xs:integer
如果上下文项是整数,将给您一个布尔值 true,否则为 false。