次の方法で共有


シーケンスの関数 - 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() 関数はサポートされていません。

  • 照合順序を提供する構文オプションはサポートされていません。

参照

xml データ型に対する XQuery 関数