2012-04-03 16 views
1

Ich habe einige Daten in einer SQL-Tabelle mit einer XML-Datentypspalte, in der ich eine Liste von Elementen zurückgeben muss, die in einen Datumsbereich fallen. Die Daten sieht wie folgt aus:Auswählen von SQL XML-Elementen zwischen Daten

Ordner Tabelle - TBLfolder: id - GUID ClientId = GUID CreatedDate: Datetime Inhalt: xml

die Inhalte xml eine Struktur hat, wie:

<Contents> 
    <Files> 
    <File id="SOMEGUID"> 
    <StartDate>2001-11-07</StartDate> 
    <EndDate>2062-11-14</EndDate> 
    <Type code="jpeg">JPEG</Type> 
    <Valid>true</Valid> 
    </File> 
    <File id="SOMEGUID"> 
    <StartDate>2012-09-01</StartDate> 
    <EndDate>2065-11-14</EndDate> 
    <Type code="jpeg">JPEG</Type> 
    <Valid>true</Valid> 
    </File> 
    Files etc...... 
</Files> 
</Contents> 

Ich schreibe dies in einer gespeicherten Prozedur, wo ich eine Client-GUID und ein Start-und Enddatum übergeben Ich bin nach einer Xml-Spalte mit allen Dateien, die zwischen dem Datumsbereich aus dem letzten Ordner-Datensatz fallen:

Hier ist, was ich bisher habe:

Select top 1 folder.contents.query('Contents/File/File 
from TBLFolder 
where clientID = @clientId 
order by CreatedDate desc 
For XML PATH ('Files') 

Was ist der beste Weg, um die Dateien Knoten in der XML, um nur Dateien zu filtern, die zwischen der Start- und Zielparameter fallen? Ich bin neu in XML in SQL so unsicher über die beste Möglichkeit, dies anzugehen.

Ich habe versucht, eine FLOWER-Anweisung und Prädikate auf meine Abfrage, aber Probleme mit der Datetime und Konvertierungen Ich habe auch bekommen p1: p2: Präfixe auf meine Elemente angezeigt.

der Ausgang I nachdem es bin:

<Files> 
     <File id="SOMEGUID"> 
     <StartDate>2001-11-07</StartDate> 
     <EndDate>2062-11-14</EndDate> 
     <Type code="jpeg">JPEG</Type> 
     <Valid>true</Valid> 
     </File> 
     <File id="SOMEGUID"> 
     <StartDate>2012-09-01</StartDate> 
     <EndDate>2065-11-14</EndDate> 
     <Type code="jpeg">JPEG</Type> 
     <Valid>true</Valid> 
     </File> 
     Files etc...... 
    </Files> 

Antwort

1
DECLARE @x XML 
SET @x='<Files> 
     <File id="SOMEGUID"> 
     <StartDate>2001-11-07</StartDate> 
     <EndDate>2062-11-14</EndDate> 
     <Type code="jpeg">JPEG</Type> 
     <Valid>true</Valid> 
     </File> 
     <File id="SOMEGUID"> 
     <StartDate>2001-11-08</StartDate> 
     <EndDate>2065-11-14</EndDate> 
     <Type code="jpeg">JPEG</Type> 
     <Valid>true</Valid> 
     </File> 
     <File id="SOMEGUID"> 
     <StartDate>2001-11-19</StartDate> 
     <EndDate>2065-11-14</EndDate> 
     <Type code="jpeg">JPEG</Type> 
     <Valid>true</Valid> 
     </File> 
    </Files>' 

    edited... 

    SELECT @x.query(' 
for $i in /Files/File 
where $i/StartDate < ''2001-11-19'' 
return $i 
') as Resu 

produzieren:

enter image description here

+0

Welches Element ist mit diesem in der where-Klausel? das StartDate oder das EndDate? – keeney

+0

@keeeny Woops Blick auf meine Bearbeitung. –

Verwandte Themen