Freigeben über


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.