sql >> Database teknologi >  >> RDS >> Sqlserver

Vælg en XML-node i SQL Server baseret på maks. værdi af et underordnet element

Hvad med dette:

SELECT 
    TOP 1
    XMLCOL.value('(/user/name)[1]', 'nvarchar(20)') as 'UserName',
    Usr.Token.value('(id)[1]', 'nvarchar(20)') AS 'ID',
    Usr.Token.value('(endDate)[1]', 'DateTime') as 'EndDate'
FROM 
    dbo.MyTable
CROSS APPLY
    xmlcol.nodes('/user/token') AS Usr(Token)
ORDER BY
    Usr.Token.value('(endDate)[1]', 'DateTime') DESC

Du tager dybest set den "atomiske" del som "Brugernavn" direkte fra XML, og krydsanvender derefter en liste med /bruger/token og udtrækker de individuelle bits, du ønsker - du får et resultatsæt med tre kolonner (Brugernavn, ID, Slutdato ), og du kan bestille og filtrere dem.

Sidebemærkning:i stedet for dette:

XMLCOL.query('user/name').value('.','NVARCHAR(20)') 

hvorfor bruger du ikke dette - føles meget nemmere!

XMLCOL.value('(/user/name)[1]', 'NVARCHAR(20)') 



  1. SQL Sådan vælger du det seneste datoelement

  2. Tildel summen af ​​kolonne til én dato i en anden kolonne, hvis kriterierne er opfyldt

  3. MySQL DECIMAL datatype

  4. SqlException:System.Data.SqlClient.SqlException (0x80131904)