Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Wybierz węzeł XML w SQL Server na podstawie maksymalnej wartości elementu podrzędnego

A co powiesz na to:

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

Zasadniczo bierzesz „atomową” część, taką jak „UserName” bezpośrednio z XML, a następnie stosujesz listę /user/token i wyodrębniasz poszczególne bity, które chcesz - otrzymujesz zestaw wyników składający się z trzech kolumn (UserName, ID, EndDate ) i możesz je zamawiać i filtrować.

Uwaga poboczna:zamiast tego:

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

dlaczego tego nie użyjesz - jest to o wiele łatwiejsze!

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. T-SQL - WYBIERZ według najbliższej daty i GROUPED BY ID

  2. przechowywanie plików na serwerze sql 2008 przy użyciu opcji filestream

  3. Sformatować liczbę z przecinkami, ale bez miejsc dziesiętnych w SQL Server 2008 R2?

  4. Różnica czasu wykonania procedury składowanej SQL

  5. Jak działa funkcja RIGHT() w SQL Server (T-SQL)