我有一个特别麻烦的xml列来查询数据。该模式由魁北克省税务局确定,因此“它就是它”
查询的重要部分如下所示:
with XMLNAMESPACES(default 'http://www.mrq.gouv.qc.ca/T5')
select xmldata.value('(//Groupe02/*/Montants/B_PrestREER_FERR_RPDB)[1]', 'decimal(16,2)');
Groupe02和Montants之间的通配符可以是A D R或T中的任何一个。(这是正确的一个字母元素名称)
麻烦是我需要查询只选择A,D或R节点而不选择T节点。作为我尝试的第一个猜测:
with XMLNAMESPACES(default 'http://www.mrq.gouv.qc.ca/T5')
select @x.value('(//Groupe02/A|D|R/Montants/B_PrestREER_FERR_RPDB)[1]', 'decimal(16,2)');
但失败了,错误“不支持XQuery语法'union'”
有哪些其他可能的方法可以进行此类查询。
答案 0 :(得分:3)
我认为使用[name()!='T']
可能有用。 E.g。
select @x.value("(//Groupe02/*[name()!='T']/Montants/B_PrestREER_FERR_RPDB)[1]", 'decimal(16,2)');