Sql-Server

從 xml 列中提取整數值

  • September 24, 2014

我只是想知道如何從 XML 列中提取整數。目前所有數字都是 4,下面的查詢可以做到。但是這個數字很快就會增長到 10,000 個,這意味著 5 位數,這個查詢將無法做到這一點。無論如何,我可以動態地從 Xml 列的中間<siteID>和中間取出任何整數。</siteID>任何建議將不勝感激。

SELECT 
SUBSTRING(msg, patindex('%[0-9][0-9][0-9][0-9]</siteID>%',msg),4)  AS DOMAIN
FROM table  a(NOLOCK)
WHERE msg like '<DLR%'
ORDER BY 1 DESC

您應該使用 XML 數據類型的value() 方法

如果您的 XML 結構如下所示:

<DLR>
 <siteID>12345</siteID>
</DLR>

您的查詢將是

select msg.value('(/DLR/siteID/text())[1]', 'int') as DOMAIN
from dbo.YourTable

但它看起來根本不像您有一個 XML 列,因為它對 XML 列msg like '<DLR%'無效。

然後您需要修改您的表以使該列是 XML,或者您可以在查詢中轉換為 XML。

select cast(msg as xml).value('(/DLR/siteID/text())[1]', 'int') as DOMAIN
from dbo.YourTable

引用自:https://dba.stackexchange.com/questions/77362