distinct-values 函數 (XQuery)

移除 $arg 所指定的時序中的重複值。如果 $arg 是空白時序,則函數會傳回空白時序。

語法

fn:distinct-values($arg as xdt:anyAtomicType*) as xdt:anyAtomicType*

引數

  • $arg
    不可部份完成值的時序。

備註

所有已傳遞至 distinct-values() 的不可部份完成值之所有類型,必須是相同基底類型的子類型。接受的基底類型是支援 eq 作業的類型。這些類型包含三個內建數值基底類型以及日期/時間基底類型,它們是 xs:string、xs:boolean 以及 xdt:untypedAtomic。xdt:untypedAtomic 類型的值會轉換成 xs:string。如果混合了這些類型,或是如果傳遞了其他類型的值,就會引發靜態錯誤。

distinct-values() 的結果會接收以類型傳遞的基底類型,例如以 xdt:untypedAtomic 為例則是 xs:string,還包含原始基數。如果輸入是靜態空白,則會隱含空白並引發靜態錯誤。

xs:string 類型的值將與 XQuery 預設的「Unicode 字碼指標定序」相比較。

範例

本主題是針對 XML 執行個體提供 XQuery 範例,這些執行個體是儲存在 AdventureWorks 資料庫的各個 xml 類型資料行中。如需這些資料行中每個資料行的概觀,請參閱<在 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() 函數。該函數接著會移除序列中的重複並傳回另兩個。

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() 函數。

  • 不支援提供定序的語法選項。