基于字符串值的函数 - 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中指定的位置返回字符串末尾的所有字符。
注解
带有三个参数的函数将返回 $sourceString
中其位置 $p
遵守以下指定的字符串:
fn:round($startingLoc) <= $p < fn:round($startingLoc) + fn:round($length)
$length的值可以大于开始位置后$sourceString值中的字符数。 在这种情况下,子字符串将返回$sourceString末尾的字符。
字符串中第一个字符位于位置 1。
如果$sourceString的值是空序列,则将其作为零长度字符串进行处理。 否则,如果 $startingLoc 或 $length 为空序列,则返回空序列。
补充字符(代理项对)
XQuery 函数中代理对的行为依赖于数据库兼容级别,并且在某些情况下,还依赖于函数的默认命名空间 URI。 有关详细信息,请参阅 SQL Server 2016 中数据库引擎功能的重大更改主题中的“XQuery 函数是代理项感知”部分。 另请参阅 ALTER DATABASE 兼容性级别(Transact-SQL) 和 排序规则和 Unicode 支持。
实现限制
SQL Server 要求 $startingLoc 和 $length参数 的类型为 xs:decimal,而不是 xs:double。
SQL Server 允许 $startingLoc 和 $length 为空序列,因为空序列是一个可能的值,因为动态错误映射到 ()。
示例
本主题针对存储在数据库中各种 xml 类型列中的 AdventureWorks2022
XML 实例提供 XQuery 示例。
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>
...