Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Изберете XML възел в SQL Server въз основа на максималната стойност на дъщерен елемент

Какво ще кажете за това:

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

По принцип взимате „атомарната“ част като „UserName“ директно от XML и след това кръстосано прилагате списък от /user/token и извличате отделните битове, които искате – получавате набор от резултати от три колони (UserName, ID, EndDate ) и можете да ги поръчате и филтрирате.

Странична бележка:вместо това:

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

защо не използвате това - усещането е много по-лесно!

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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да преброим празните таблици в базата данни?

  2. HTTP Status 500 - Java Runtime Environment (JRE) версия 1.7 не се поддържа от този драйвер

  3. Как да конвертирам от тип данни пари в SQL сървър?

  4. Актуализиране на таблица с помощта на JOIN в SQL Server?

  5. Как да върнете всички ненадеждни ограничения CHECK в SQL Server (пример за T-SQL)