Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Pilih simpul XML di SQL Server berdasarkan nilai maksimal elemen anak

Bagaimana dengan ini:

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

Anda pada dasarnya mengambil bagian "atom" seperti 'UserName' langsung dari XML, dan kemudian menerapkan daftar /user/token dan mengekstrak bit individual yang Anda inginkan - Anda mendapatkan set hasil dari tiga kolom (UserName, ID, EndDate ) dan Anda dapat memesan dan memfilternya.

Catatan tambahan:alih-alih ini:

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

mengapa Anda tidak menggunakan ini - terasa lebih mudah!

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. Nama objek tidak valid SQL Server 2008 R2 - Prosedur tersimpan

  2. SQL Server 2008:Perubahan Tipe Data Massal

  3. Kesalahan - SqlDateTime meluap. Harus antara 1/1/1753 12:00:00 dan 31/12/9999 11:59:59 malam

  4. Skema yang ditentukan tidak valid. Kesalahan:Beberapa jenis dengan nama

  5. SQL Server 2005 Memory Pressure dan tempdb menulis masalah