distinct-values 関数 (XQuery)
$arg により指定したシーケンスから重複する値を削除します。 $arg が空のシーケンスの場合は、この関数は空のシーケンスを返します。
構文
fn:distinct-values($arg as xdt:anyAtomicType*) as xdt:anyAtomicType*
引数
- $arg
アトミック値のシーケンス。
説明
distinct-values() に渡されるアトミック値の型はすべて、同じ基本型のサブタイプである必要があります。 使用できる基本型は、eq 演算子をサポートする型です。 この型には、3 つの組み込み数値基本データ型、date/time 基本データ型、xs:string、xs:boolean、および xdt:untypedAtomic が含まれます。 xdt:untypedAtomic 型の値は、xs:string にキャストされます。 これらの型が混在している場合、または他の型の他の値が渡された場合は、静的エラーが発生します。
distinct-values() の結果は xs:string など (xdt:untypedAtomic の場合)、渡された型の基本型を受け取ります。基数は元のままです。 入力が静的に空の場合は、結果が暗黙的に空になり、静的エラーが生成されます。
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() 関数に渡されています。 関数は、シーケンス内の重複する値を削除し、結果として得られた 2 つの値を返します。
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() 関数はサポートされません。
照合順序を指定する構文オプションはサポートされません。