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 コードポイント照合順序と比較されます。

このトピックでは、AdventureWorks2008R2 データベースのさまざまな xml 型の列に格納されている XML インスタンスに対して実行する XQuery の例について説明します。これらの各列の概要については、「AdventureWorks2008R2 データベースの 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() 関数はサポートされません。

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