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 の例について説明します。これらの各列の概要については、「AdventureWorks データベースの xml データ型表現」を参照してください。
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() 関数はサポートされません。
- 照合順序を指定する構文オプションはサポートされません。