distinct-values (función de XQuery)
Quita los valores duplicados de la secuencia especificada por $arg. Si $arg es una secuencia vacía, la función devuelve la secuencia vacía.
Sintaxis
fn:distinct-values($arg as xdt:anyAtomicType*) as xdt:anyAtomicType*
Argumentos
- $arg
Secuencia de valores atómicos.
Comentarios
Todos los tipos de valores atomizados que se pasan a distinct-values() deben ser subtipos del mismo tipo base. Los tipos base aceptados son los tipos que admiten la operación eq. Entre estos tipos se incluyen los tres tipos base numéricos integrados, los tipos base de fecha y hora, xs:string, xs:boolean y xdt:untypedAtomic. Los valores de tipo xdt:untypedAtomic se convierten en xs:string. Si hay un mezcla de estos tipos, o si se pasan otros valores de otros tipos, se produce un error estático.
El resultado de distinct-values() recibe el tipo base de los tipos pasados, como xs:string en el caso de xdt:untypedAtomic, con la cardinalidad original. Si se trata de una entrada vacía estática, se presupone que está vacía y se genera un error estático.
Los valores de tipo xs:string se comparan con la intercalación de punto de código Unicode predeterminada de XQuery.
Ejemplos
Este tema proporciona ejemplos de XQuery en instancias XML almacenadas en varias columnas de tipo xml de la base de datos AdventureWorks.
A.Usar la función distinct-values() para quitar valores duplicados de la secuencia
En este ejemplo, una instancia XML que contiene números de teléfono se asigna a una variable de tipo xml. La expresión XQuery especificada para esta variable utiliza la función distinct-values() para compilar una lista de números de teléfono que no contenga duplicados.
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
El resultado es el siguiente:
111-111-1111 222-222-2222
En la consulta siguiente, se pasa una secuencia de números (1, 1, 2) a la función distinct-values(). A continuación, la función quita el duplicado de la secuencia y devuelve los otros dos valores.
declare @x xml
set @x = ''
select @x.query('
distinct-values((1, 1, 2))
') as result
La consulta devuelve 1 y 2.
Limitaciones de la implementación
Éstas son las limitaciones:
La función distinct-values() asigna valores enteros a xs:decimal.
La función distinct-values() solo admite los tipos mencionados anteriormente y no una combinación de tipos base.
No se admite la función distinct-values() para valores xs:duration.
No se admite la opción sintáctica que proporciona una intercalación.