Só estou querendo saber como posso extrair um número inteiro de uma coluna XML. Atualmente, todos os dígitos são 4, o que a consulta abaixo é capaz de fazer. Mas o número vai crescer para 10.000 em breve, o que significará 5 dígitos e esta consulta não será capaz de fazê-lo. Existe alguma maneira de obter dinamicamente qualquer número inteiro que esteja próximo no meio <siteID>
e </siteID>
da coluna Xml. Qualquer sugestão será muito apreciada.
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
Você deve usar o método value() do tipo de dados XML.
Se sua estrutura XML se parece com isso:
Sua consulta seria
Mas, no entanto, não parece que você tenha uma coluna XML, pois
msg like '<DLR%'
é inválida nas colunas XML.Em seguida, você precisa modificar sua tabela para que a coluna seja XML ou pode converter para XML em sua consulta.
Se seus dados não estiverem tão limpos, a função XQuery fn:number é realmente muito boa para limpá-los para você. Experimente esta demonstração simples:
Se o MS SQL Server for o que você está usando, ele oferece suporte à consulta XPath na instrução SELECT. Veja aqui um exemplo e aqui está uma pergunta SO.
Isso permitirá que você extraia os numerais de dentro do xml, independentemente de quantos dígitos ele contém. Você pode então
CONVERT()
fazê-loint
ou o que for necessário.