sql >> データベース >  >> RDS >> Sqlserver

子要素の最大値に基づいて SQL Server の XML ノードを選択する

    これはどうですか:

    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 のリストをクロス適用して、必要な個々のビットを抽出します。3 つの列 (UserName、ID、EndDate) の結果セットが得られます。 )、それらを並べ替えてフィルタリングできます。

    補足:これの代わりに:

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

    これを使ってみませんか - ずっと簡単に感じます!

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



    1. Javaを使用してPostgreSQLのbyteaからファイルを取得する

    2. GUIを使用してMySQLWorkbenchでテーブルを作成する方法

    3. jQuery Connected Sortable Lists、Save Order to MySQL

    4. Access2016でテンプレートからデータベースを作成する方法