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,则只返回那些所在位置大于零的字符。如果此值大于 $sourceString 的长度,则返回长度为零的字符串。$length
[可选] 要检索的字符数。如果没有指定此值,它将返回从 $startingLoc 中指定的位置开始直到字符串末尾的所有字符。
注释
带有三个参数的函数将返回 $sourceString 中其位置 $p 遵守以下指定的字符串:
fn:round($startingLoc) <= $p < fn:round($startingLoc) + fn:round($length)
$length 的值可以大于 $sourceString 值中指定的、位于起始位置后的字符数。在这种情况下,子字符串最多返回到达 $sourceString 末尾时的字符数。
字符串中第一个字符位于位置 1。
如果 $sourceString 值是空序列,则该值将被作为长度为零的字符串来处理。否则,如果 $startingLoc 或 $length 是空序列,将返回空序列。
示例
本主题提供了一些对 XML 实例的 XQuery 示例,这些实例存储在 AdventureWorks 数据库内不同的 xml 类型列中。有关这些列的概述,请参阅AdventureWorks 数据库中的 xml 数据类型表示形式。
A. 使用 substring() XQuery 函数来检索部分概要产品型号说明
该查询将检索文档中说明产品型号的文本(<Summary> 元素)中的前 50 个字符。
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 代理对被算作两个字符而不是一个字符。