2013-10-21 66 views
1

我在ABCD的表中有一個XML類型的列XMLRECORDSQL Server中兩個xml節點的數字比較

我的記錄包含:

<row id="100" xml:space="preserve"> 
    <c9>400</c9> 
    <c10>4000</c10> 
</row> 

<row id="90" xml:space="preserve"> 
    <c9>324</c9> 
    <c10>34</c10> 
</row> 

我試圖使用查詢

SELECT XMLRECORD 
FROM ABCD 
WHERE XMLRECORD.exist(N'/row[c9/text() < c10/text()]') = 1 

當它同時顯示做ASCII記錄比較SQL服務器執行該XMLRECORD的兩個節點比較。如何強制SQL Server進行數字比較?

回答

1

,你可以將它轉換爲內部的XPath號:

select * 
from ABCD 
where xmlrecord.exist('/row[number((c9/text())[1]) < number((c10/text())[1])]') = 1 

或比較值:

select * 
from ABCD 
where xmlrecord.value('(/row/c9/text())[1]', 'int') < xmlrecord.value('(/row/c10/text())[1]', 'int') 
+0

非常感謝您的快速回復。使用內部的number()會使性能受到影響嗎? – user2902029

+0

@ user2902029我建議檢查一下你的數據,我認爲第一個應該比第二個快,但可能比沒有數字的慢(比如你的問題)要慢一些。 –