基于序列的函数 - distinct-values
适用于:SQL Server
从 $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 码位排序规则进行比较。
示例
本主题提供针对存储在 AdventureWorks 数据库中各种 xml 类型列中的 XML 实例的 XQuery 示例。
A. 使用 distinct-values() 函数从序列中删除重复的值
在此示例中,将包含电话号码的 XML 实例分配给 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 () 函数。
不支持提供排序规则的语法选项。
另请参阅
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈