字串值的相關函式 - substring
適用於:SQL Server
傳回$sourceString值的一部分,從$startingLoc值所指示的位置開始,然後繼續$length值所指示的字元數。
語法
fn:substring($sourceString as xs:string?,
$startingLoc 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,則只會傳回位於大於零的位置字元。 如果大於$sourceString的長度,則會傳回長度為零的字串。
$length
[選擇性]要擷取的字元數。 如果未指定,則會傳回$startingLoc到字串結尾所指定位置的所有字元。
備註
函式的三個自變數版本會傳回其位置$p
服從的$sourceString
字元:
fn:round($startingLoc) <= $p < fn:round($startingLoc) + fn:round($length)
$length的值可以大於開始位置之後$sourceString值中的字元數。 在此情況下,子字串會傳回最多$sourceString結尾的字元。
字串的第一個字元位於位置 1。
如果 $sourceString 的值是空序列,則會將其處理為長度為零的字串。 否則,如果 $startingLoc 或 $length 是空序列,則會傳回空序列。
補充字元 (Surrogate 字組)
XQuery 函式中 Surrogate 配對的行為取決於資料庫相容性層級,在某些情況下,則取決於函式的預設命名空間 URI。 如需詳細資訊,請參閱 SQL Server 2016 中重大 資料庫引擎 功能變更主題中的
實作限制
SQL Server 需要 $startingLoc 和 $length參數 類型為 xs:decimal,而不是 xs:double。
SQL Server 允許 $startingLoc 和 $length 為空序列,因為空序列是對應至 () 的動態錯誤所產生的可能值。
範例
本主題針對儲存在資料庫中各種 xml 類型數據行中的 AdventureWorks2022
XML 實例,提供 XQuery 範例。
A. 使用子字串() 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>
...