共用方式為


資料存取子函式 - 字串 (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 AS 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