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 個字元。