2016-12-20 14 views
0

XML文書がある列に対してSQLクエリを実行しています。XML文書から最新の日付を取得するSQLクエリ

XMLドキュメントは次のようになります。

<root> 
    <date>2016-10-12</date> 
    <date>2016-12-01</date> 
    <date>2016-11-13</date> 
</root>  

ご覧のとおり、日付が間違っています。

私は、XMLドキュメント(この場合は2016-12-01)から最新の日付を取得するSQLクエリを探しています。

+0

どのDBMSを使用していますか? –

+0

Microsoft SQL Server –

答えて

1

この

DECLARE @xml XML 

SET @xml = '<root> 
    <date>2016-10-12</date> 
    <date>2016-12-01</date> 
    <date>2016-11-13</date> 
    </root>' 

SELECT Top 1 x.col.value('.', 'date') AS dates 
FROM @xml.nodes('/root/date') x(col) 
ORDER BY dates DESC 
+1

こんにちはPrdp、あなたは '/'(*深い検索*)を避ける必要があります。ちょうどあなたのルート要素と同じ名前を持つ大きなXML内の要素があると想像してください...とにかくそれは言うべき速​​いはずです*ねえ! rootで起動し、パスに沿って移動してください!*次に、* root *という名前の要素を尋ねます。 – Shnugo

+0

ありがとうございます。心に留めておきます –

1

一つの方法を試してみては(最終的にGROUP BYで、PRDPの答え、またはMAX()のように、TOP 1と外部ORDER BY)すべてのデータを読み取り、外部から最大値を見つけることです。

もう一つの方法は、FLWOR-XQueryです:

DECLARE @xml XML= 
'<root> 
    <date>2016-10-12</date> 
    <date>2016-12-01</date> 
    <date>2016-11-13</date> 
</root>'; 

SELECT @xml.value('max(for $d in /root/date return xs:date($d))','date') 

これは意味:

は、/root/dateでそれぞれの値を取るdateとしてそれを返すと、最高を見つけます! ...

両方のアプローチは、リスト全体を読む必要があるでしょうが、それは再び摘み、最大値を探すのではなく、完全なリストを返し、何らかの外部ソートを行うには少し速くだけでなければなりません

+0

本当にあなたのXML回答は印象的です+1 –

関連する問題