distinct-values-Funktion (XQuery)
Entfernt doppelte Werte aus der durch $arg angegebenen Sequenz. Wenn $arg eine leere Sequenz ist, gibt die Funktion die leere Sequenz zurück.
Syntax
fn:distinct-values($arg as xdt:anyAtomicType*) as xdt:anyAtomicType*
Argumente
- $arg
Sequenz der atomaren Werte.
Hinweise
Alle Typen der atomaren Werte, die an distinct-values() übergeben werden, müssen Untertypen des gleichen Basistyps sein. Basistypen, die angenommen werden, sind die Typen, die den eq-Vorgang unterstützen. Diese Typen sind z. B. die drei integrierten numerischen Basistypen, die date/time-Basistypen, xs:string, xs:boolean und xdt:untypedAtomic. Werte des Typs xdt:untypedAtomic werden in xs:string umgewandelt. Wenn eine Mischung dieser Typen vorliegt oder andere Werte anderer Typen übergeben werden, wird ein statischer Fehler ausgelöst.
Das Ergebnis von distinct-values() erhält den Basistyp der übergebenen Typen, z. B. xs:string im Fall von xdt:untypedAtomic, mit der ursprünglichen Kardinalität. Wenn die Eingabe statisch leer ist, wird dies angegeben und ein statischer Fehler ausgegeben.
Werte vom Typ xs:string werden mit der Unicode-Codepunkt-Standardsortierung von XQuery verglichen.
Beispiele:
Dieses Thema stellt XQuery-Beispiele für XML-Instanzen bereit, die in verschiedenen Spalten vom xml-Typ in der AdventureWorks2008R2-Datenbank gespeichert werden. Eine Übersicht über diese Spalten finden Sie unter Darstellung des xml-Datentyps in der AdventureWorks2008R2-Datenbank.
A. Verwenden der distinct-values()-Funktion zum Entfernen doppelter Werte aus der Sequenz
In diesem Beispiel wird eine XML-Instanz, die Rufnummern enthält, einer Variablen vom Typ xml zugewiesen. Die für diese Variable angegebene XQuery verwendet die distinct-values()-Funktion, um eine Liste von Rufnummern zu kompilieren, die keine doppelten Werte enthält.
declare @x xml;
set @x = '<PhoneNumbers>
<Number>111-111-1111</Number>
<Number>111-111-1111</Number>
<Number>222-222-2222</Number>
</PhoneNumbers>'
-- 1st select
select @x.query('
distinct-values( data(/PhoneNumbers/Number) )
') as result
Dies ist das Ergebnis:
111-111-1111 222-222-2222
In der folgenden Abfrage wird eine Sequenz von Zahlen (1, 1, 2) an die distinct-values()-Funktion übergeben. Die Funktion entfernt anschließend die doppelten Werte in der Sequenz und gibt die beiden verbleibenden Werte zurück.
declare @x xml;
set @x = '';
select @x.query('
distinct-values((1, 1, 2))
') as result;
Die Abfrage gibt 1 2 zurück.
Implementierungseinschränkungen
Die folgenden Einschränkungen sind zu beachten:
Die distinct-values()-Funktion ordnet ganzzahlige Werte xs:decimal zu.
Die distinct-values()-Funktion unterstützt nur die zuvor aufgeführten Typen und keine Mischung der Basistypen.
Die distinct-values()-Funktion wird für Werte des Typs xs:duration nicht unterstützt.
Die Option syntactic, die eine Sortierung bereitstellt, wird nicht unterstützt.