序列的相關函式 - distinct-values
適用於:SQL Server
從$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 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() 函式。 然後函式會移除序列中的重複專案,並傳回其他兩個。
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() 函式。
不支援提供定序的語法選項。