从 xml 列中提取整数值

SQL*_*Ben 1 xml sql-server t-sql substring

我只是想知道如何从 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
Run Code Online (Sandbox Code Playgroud)

Mik*_*son 5

您应该使用XML 数据类型的value() 方法

如果您的 XML 结构如下所示:

<DLR>
  <siteID>12345</siteID>
</DLR>
Run Code Online (Sandbox Code Playgroud)

您的查询将是

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

但是看起来您根本没有 XML 列,因为它对 XML 列msg like '<DLR%'无效。

然后,您需要修改您的表,使该列成为 XML,或者您可以在查询中将其转换为 XML。

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