Função distinct-values (XQuery)
Remove valores duplicados da seqüência especificada por $arg. Se $arg for uma seqüência vazia, a função retornará a seqüência vazia.
Sintaxe
fn:distinct-values($arg as xdt:anyAtomicType*) as xdt:anyAtomicType*
Argumentos
- $arg
Seqüência de valores atômicos.
Comentários
Todos os tipos dos valores atomizados passados a distinct-values() precisam ser subtipos do mesmo tipo base. Os tipos base aceitos são os tipos que oferecem suporte à operação eq. Esses tipos incluem os três tipos base numéricos internos, os tipos base de data/hora, xs:string, xs:boolean e xdt:untypedAtomic. Os valores do tipo xdt:untypedAtomic são convertidos em xs:string. Se houver uma mistura desses tipos, ou se outros valores de outros tipos forem passados, será gerado um erro estático.
O resultado de distinct-values() recebe o tipo base dos passados em tipos, como xs:string no caso de xdt:untypedAtomic, com a cardinalidade original. Se a entrada estiver estaticamente vazia, o vazio será implícito e um erro estático será gerado.
Os valores de xs:string são comparados ao agrupamento de ponto de código Unicode padrão XQuery.
Exemplos
Este tópico fornece exemplos de XQuery em instâncias XML armazenadas em várias colunas do tipo xml no banco de dados AdventureWorks. Para obter uma visão geral de cada uma dessas colunas, consulte Representação de tipo de dados xml no banco de dados do AdventureWorks.
A. Uso da função distinct-values() para remover valores duplicados da seqüência
Neste exemplo, uma instância XML que contém números de telefone é atribuída a uma variável do tipo xml . O XQuery especificado contra essa variável usa a função distinct-values() para compilar uma lista de números de telefone que não contêm duplicatas.
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
Este é o resultado:
111-111-1111 222-222-2222
Na consulta a seguir, uma seqüência de números (1, 1, 2) é passada na função distinct-values() . A função remove então a duplicata na seqüência e retorna as outras duas.
declare @x xml
set @x = ''
select @x.query('
distinct-values((1, 1, 2))
') as result
A consulta retorna 1 2.
Limitações de implementação
Estas são as limitações:
A função distinct-values() mapeia os valores inteiros para xs:decimal.
A função distinct-values() só oferece suporte aos tipos previamente mencionados e não oferece suporte à combinação de tipos base.
Não é oferecido suporte à função distinct-values() nos valores xs:duration.
Não há suporte para opção sintática que fornece agrupamento.