substring 函數 (XQuery)

傳回 $sourceString 值的一部份,從 $startingLoc, 值所指示的位置開始,一直到 $length 值所指示的字元數為止。

語法

fn:substring($sourceString as xs:string?,
                          $startingLoc  as as xs:decimal?) as xs:string?

fn:substring($sourceString as xs:string?,
                          $startingLoc as xs:decimal?,
                          $length as xs:decimal?) as xs:string?

引數

  • $sourceString
    來源字串。

  • $startingLoc
    來源字串中子字串開始的起點。如果此值是負數或 0,則只傳回位置大於 0 的那些字元。如果值大於 $sourceString 的長度,則傳回長度為 0 的字串。

  • $length
    [選擇性] 要擷取的字元數。若未指定,它會傳回從 $startingLoc 指定的位置到字串結尾的所有字元。

備註

此函數的三引數版本會傳回 $sourceString 中位置 $p 遵守的字元數:

fn:round($startingLoc) <= $p < fn:round($startingLoc) + fn:round($length)

$length 的值可大於 $sourceString 值在開始位置之後的字元數。在此案例中,子字串會傳回到 $sourceString 結尾之前的字元。

字串的第一個字元是在位置 1。

如果 $sourceString 的值是空的時序,則會當成零長度的字串來處理。否則,如果 $startingLoc 或 $length 是空的序列,則傳回空的序列。

範例

本主題針對儲存在 AdventureWorks 資料庫中之各種 xml 類型資料行的 XML 執行個體,提供 XQuery 範例。如需這些資料行中每個資料行的概觀,請參閱<在 AdventureWorks 資料庫中的 xml 資料類型表示法>。

A. 使用 substring() XQuery 函數擷取產品型號描述的部份摘要

此查詢會擷取產品型號描述文字的前 50 個字元,即文件中的 <Summary> 元素。

WITH XMLNAMESPACES ('https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription' AS pd)
SELECT ProductModelID, CatalogDescription.query('
    <Prod>{ substring(string((/pd:ProductDescription/pd:Summary)[1]), 1, 50) }</Prod>
 ') as Result
FROM Production.ProductModel
where CatalogDescription.exist('/pd:ProductDescription')  = 1

請注意下列項目是從上一個查詢而來:

  • string() 函數會傳回 <Summary> 元素的字串值。會使用此函數,是因為 <Summary> 元素同時包含文字和子元素 (html 格式設定元素),而且因為您會略過這些元素而擷取所有文字。

  • substring() 函數會從 string() 所擷取的字串值中擷取前 50 個字元。

以下是部份結果:

ProductModelID Result
-------------- ----------------------------------------------------
19      <Prod>Our top-of-the-line competition mountain bike.</Prod> 
23      <Prod>Suitable for any type of riding, on or off-roa</Prod>
...

實作限制

以下這些是限制:

  • SQL Server 要求 $startingLoc 和 $length parameters 為 xs:decimal 類型,而非 xs:double 類型。

  • SQL Server 允許$startingLoc 和 $length 為空的序列,因為空的序列可能是動態錯誤對應到 () 的結果值。

  • Unicode UTF-16 Surrogate 字組算是 2 個字元,而非 1 個字元。