distinct-values 函数 (XQuery)

从 $arg 指定的序列中删除重复的值。如果 $arg 是空序列,则函数返回空序列。

语法

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

参数

  • $arg
    原子值序列。

注释

传递到 distinct-values() 的原子化值的所有类型必须为同一基类型的子类型。接受的基类型是支持 eq 运算的类型。这些类型包括三种内置数值基类型、日期/时间基类型、xs:string、xs:boolean 和 xdt:untypedAtomic。类型 xdt:untypedAtomic 的值转换为 xs:string。如果这些类型混合在一起,或者传递了其他类型的其他值,则会引发静态错误。

distinct-values() 的结果接收带有原始基数的传入类型的基类型,如 xdt:untypedAtomic 中的 xs:string。如果输入在静态上为空,则暗示为空,并且会引发静态错误。

类型 xs:string 的值与 XQuery 默认 Unicode 码位排序规则进行比较。

示例

本主题提供了一些对 XML 实例的 XQuery 示例,这些实例存储在 AdventureWorks2008R2 数据库内不同的 xml 类型列中。有关这些列的概述,请参阅AdventureWorks2008R2 数据库中的 xml 数据类型表示形式

A. 使用 distinct-values() 函数从序列中删除重复的值

在此示例中,将包含电话号码的 XM 实例分配给 xml 类型变量。对此变量指定的 XQuery 使用 distinct-values() 函数编译一些不包含重复项的电话号码。

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

结果如下:

111-111-1111 222-222-2222

在以下查询中,数字序列 (1, 1, 2) 将传入 distinct-values() 函数。然后函数将删除序列中重复的数字并返回剩下的两个数字。

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

该查询将返回 1 2。

实现限制

限制如下:

  • distinct-values() 函数将整数值映射到 xs:decimal。

  • distinct-values() 函数只支持以前提及的类型,不支持基类型的混合。

  • 不支持对 xs:duration 值执行 distinct-values() 函数。

  • 不支持提供排序规则的语法选项。