Fonction distinct-values (XQuery)
Supprime les valeurs en double d'une séquence spécifiée par $arg. La fonction renvoie une séquence vide si $arg correspond à une séquence vide.
Syntaxe
fn:distinct-values($arg as xdt:anyAtomicType*) as xdt:anyAtomicType*
Argument
- $arg
Séquence de valeurs atomiques.
Notes
Tous les types de valeurs atomisées transmises à distinct-values() doivent être du même sous-type que le type de base. Les types de base acceptés correspondent à ceux qui prennent en charge l'opération eq. Ces types incluent les trois types numériques de base intégrés, les types de base date/heure et les types xs:string (chaîne), xs:boolean (booléen) et xdt:untypedAtomic (atomique non typé). Les valeurs de type xdt:untypedAtomic sont converties en type xs:string. En cas de mélange de ces types ou si des valeurs d'autres types sont transmis, une erreur statique se produit.
Le résultat de la fonction distinct-values() reçoit le type de base des types transmis, tel que xs:string dans le cas du type xdt:untypedAtomic, avec sa cardinalité d'origine. Si l'entrée est vide (valeur empty) de façon statique, « empty » est alors implicite et une erreur statique est émise.
Les valeurs de type xs:string sont comparées au classement de point de codes Unicode par défaut de XQuery.
Exemples
Cette rubrique propose des exemples de XQuery relatifs à des instances XML stockées dans différentes colonnes de type xml tirées de la base de données AdventureWorks.
A.Utilisation de la fonction distinct-values() pour supprimer les valeurs en double d'une séquence
Dans cet exemple, une instance XML contenant des numéros de téléphone est affectée à une variable de type xml. La requête XQuery spécifiée sur cette variable utilise la fonction distinct-values() pour compiler une liste de numéros de téléphone ne contenant pas de doublons.
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
Voici le résultat obtenu :
111-111-1111 222-222-2222
Dans la requête suivante, une séquence de chiffres (1, 1, 2) est transmise à la fonction distinct-values(). La fonction supprime ensuite la valeur en double de la séquence et renvoie les deux autres.
declare @x xml
set @x = ''
select @x.query('
distinct-values((1, 1, 2))
') as result
La requête renvoie « 1 2 ».
Limitations relatives à son implémentation
Les limitations suivantes s'appliquent :
La fonction distinct-values() mappe les valeurs entières au type xs:decimal.
La fonction distinct-values() ne prend en charge que les types précédemment mentionnés et n'accepte pas les combinaisons de types de base.
La fonction distinct-values() appliquée à des valeurs de type xs:duration (durée) n'est pas prise en charge.
L'option syntaxique fournissant un classement n'est pas prise en charge.