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.

Voir aussi

Référence

Fonctions XQuery impliquant le type de données xml