シーケンスの関数 - distinct-values
適用対象: SQL Server
$argで指定されたシーケンスから重複する値を削除します。 $argが空のシーケンスの場合、関数は空のシーケンスを返します。
構文
fn:distinct-values($arg as xdt:anyAtomicType*) as xdt:anyAtomicType*
引数
$arg
アトミック値のシーケンス。
解説
distinct-values()に渡されるアトミック化された値のすべての型、同じ基本型のサブタイプである必要があります。 受け入れられる基本型は、 eq 操作をサポートする型です。 これらの型には、3 つの組み込みの数値基本型、日付/時刻基本型、xs:string、xs:boolean、および xdt:untypedAtomic が含まれます。 xdt:untypedAtomic 型の値は xs:string にキャストされます。 これらの型が混在している場合、または他の型の他の値が渡された場合は、静的エラーが発生します。
distinct-values()の結果は、渡された型の基本型 (xdt:untypedAtomic の場合は xs:string など) を元のカーディナリティで受け取ります。 入力が静的に空の場合、空は暗黙的に指定され、静的エラーが発生します。
xs:string 型の値は、XQuery の既定の Unicode Codepoint 照合順序と比較されます。
例
このトピックでは、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() 関数はサポートされていません。
照合順序を提供する構文オプションはサポートされていません。