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 是空的序列,則傳回空的序列。
補充字元 (Surrogate 字組)
XQuery 函式中 Surrogate 字組的行為相依於資料庫相容性層級,而且在某些情況下,還相依於函式的預設命名空間 URI。 如需詳細資訊,請參閱<SQL Server 2012 中對於 Database Engine 的重大變更>主題中的「XQuery 函式是 Surrogate 感知的」一節。 另請參閱<ALTER DATABASE 相容性層級 (Transact-SQL)>和<定序與 Unicode 支援>。
實作限制
SQL Server 要求 $startingLoc 和 $length parameters 為 xs:decimal 類型,而非 xs:double 類型。
SQL Server 允許 $startingLoc 和 $length 為空的序列,因為空的序列可能是動態錯誤對應到 () 的結果值。
範例
本主題是針對 XML 執行個體提供 XQuery 範例,這些執行個體是儲存在 AdventureWorks2012 資料庫的數個 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>
...