2009-11-06 69 views
0

我有一個特別麻煩的xml列來查詢數據。該模式是由收入的魁北克省固定,「這是它是什麼」從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之間的通配符可以是任何一個ADR或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語法‘聯盟’,不支持」

什麼其他可能的方式是有做出這樣的查詢。

回答

3

我認爲使用[name()!='T']可能工作。例如。

select @x.value("(//Groupe02/*[name()!='T']/Montants/B_PrestREER_FERR_RPDB)[1]", 'decimal(16,2)'); 
+0

看起來真是個好主意! :-) – 2009-11-06 15:18:04

+1

輝煌---順便說一句,似乎local-name()是要使用的函數。 – 2009-11-06 15:33:19