資料存取子函式 - 字串 (XQuery)
適用於:SQL Server
傳回以字串表示的$arg 值 。
語法
fn:string() as xs:string
fn:string($arg as item()?) as xs:string
引數
$arg
這是節點或不可部分完成的值。
備註
如果 $arg 為空序列,則會傳回長度為零的字串。
如果 $arg 是節點,函式會傳回使用 string-value 存取子取得之節點的字串值。 這定義于 W3C XQuery 1.0 和 XPath 2.0 資料模型規格中。
如果 $arg 是不可部分完成的值,則函式會傳回運算式轉換成 xs:string 所傳回的相同字串 , $arg ,除非另有注明。
如果$arg 的類型 是 xs:anyURI ,URI 就會轉換成字串,而不會逸出特殊字元。
在此實作中, 沒有引數的 fn:string() 只能在內容相依述詞的內容中使用。 具體來說,它只能在括弧 ([ ]) 內使用。
範例
本主題針對 AdventureWorks 資料庫中各種 xml 類型資料行中儲存的 XML 實例,提供 XQuery 範例。
A. 使用字串函式
下列查詢會 <Features
> 擷取 專案的子專案節點。 <ProductDescription
>
SELECT CatalogDescription.query('
declare namespace PD="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription";
/PD:ProductDescription/PD:Features
')
FROM Production.ProductModel
WHERE ProductModelID=19
以下是部份結果:
<PD:Features xmlns:PD="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription">
These are the product highlights.
<p1:Warranty xmlns:p1="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain">
<p1:WarrantyPeriod>3 years</p1:WarrantyPeriod>
<p1:Description>parts and labor</p1:Description>
</p1:Warranty>
...
</PD:Features>
如果您指定 string() 函式,您會收到指定節點的字串值。
SELECT CatalogDescription.query('
declare namespace PD="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription";
string(/PD:ProductDescription[1]/PD:Features[1])
')
FROM Production.ProductModel
WHERE ProductModelID=19
以下是部份結果。
These are the product highlights.
3 yearsparts and labor...
B. 在各種節點上使用字串函式
在下列範例中,XML 實例會指派給 xml 類型變數。 系統會指定查詢來說明將 string() 套用 至各種節點的結果。
declare @x xml
set @x = '<?xml version="1.0" encoding="UTF-8" ?>
<!-- This is a comment -->
<root>
<a>10</a>
just text
<b attr="x">20</b>
</root>
'
下列查詢會擷取檔節點的字串值。 這個值是由串連其所有子代文位元組點的字串值所形成。
select @x.query('string(/)')
以下是結果:
This is a comment 10
just text
20
下列查詢會嘗試擷取處理指示節點的字串值。 結果是空序列,因為它不包含文位元組點。
select @x.query('string(/processing-instruction()[1])')
下列查詢會擷取批註節點的字串值,並傳回文位元組點。
select @x.query('string(/comment()[1])')
以下是結果:
This is a comment