Funzione distinct-values (XQuery)

Rimuove valori duplicati dalla sequenza specificata da $arg. Se $arg è una sequenza vuota, la funzione restituisce la sequenza vuota.

Sintassi

fn:distinct-values($arg as xdt:anyAtomicType*) as xdt:anyAtomicType*

Argomenti

  • $arg
    Sequenza di valori atomici.

Osservazioni

Tutti i tipi di valori atomizzati passati alla funzione distinct-values() devono essere sottotipi dello stesso tipo di base. I tipi di base accettati sono quelli che supportano l'operazione eq. Tra questi tipi sono inclusi i tre tipi di base numerici predefiniti, ovvero i tipi di base di data/ora xs:string, xs:boolean e xdt:untypedAtomic. Per i valori di tipo xdt:untypedAtomic viene eseguito il cast a xs:string. In presenza di una combinazione di questi tipi o nel caso in cui vengano passati altri valori di altri tipi, viene restituito un errore statico.

Il risultato della funzione distinct-values() riceve il tipo di base dei tipi passati, ad esempio xs:string nel caso di xdt:untypedAtomic, con la cardinalità originale. Se l'input è una sequenza vuota calcolata in modo statico, la sequenza vuota è implicita e viene restituito un errore statico.

I valori di tipo xs:string vengono confrontati con le regole di confronto dei punti di codice Unicode predefinite XQuery.

Esempi

In questo argomento vengono forniti esempi di utilizzo del linguaggio XQuery sulle istanze XML archiviate in diverse colonne di tipo xml nel database AdventureWorks2008R2. Per una panoramica su ognuna di queste colonne, vedere Rappresentazione del tipo di dati XML nel database AdventureWorks2008R2.

A. Utilizzo della funzione distinct-values() per rimuovere valori duplicati dalla sequenza

Nell'esempio seguente, un'istanza XML contenente numeri di telefono viene assegnata a una variabile di tipo xml. La query XQuery specificata su tale variabile utilizza la funzione distinct-values() per compilare un elenco di numeri di telefono che non contiene duplicati.

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

Risultato:

111-111-1111 222-222-2222

Nella query seguente, una sequenza di numeri (1, 1, 2) viene passata alla funzione distinct-values(). La funzione rimuove quindi il duplicato dalla sequenza e restituisce gli altri due.

declare @x xml;
set @x = '';
select @x.query('
  distinct-values((1, 1, 2))
') as result;

La query restituisce 1 2.

Limitazioni di implementazione

Limitazioni:

  • La funzione distinct-values() esegue il mapping tra i valori integer e xs:decimal.

  • La funzione distinct-values() supporta solo i tipi menzionati in precedenza e non supporta la combinazione dei tipi di base.

  • La funzione distinct-values() non è supportata sui valori di tipo xs:duration.

  • Non è supportata l'opzione sintattica che fornisce le regole di confronto.

Vedere anche

Riferimento