我在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>'
在这种情况下,我希望输出为“0”。
有出路吗?
答案 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。