Condividi tramite


Funzioni su sequenze - distinct-values

Si applica a: SQL Server

Rimuove i 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 dei valori atomizzati passati a distinct-values() devono essere sottotipi dello stesso tipo di base. I tipi di base accettati sono i tipi 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 di 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 XQuery su istanze XML archiviate in varie colonne di tipo xml nel database AdventureWorks.

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

In questo esempio, un'istanza XML che contiene numeri di telefono viene assegnata a una variabile di tipo xml . L'espressione XQuery specificata per questa variabile usa la funzione distinct-values() per compilare un elenco di numeri di telefono che non contengono 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 viene passata una sequenza di numeri (1, 1, 2) 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 dei valori integer a xs:decimal.

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

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

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

Vedi anche

Funzioni XQuery per il tipo di dati XML