基于字符串值的函数 - 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>  
...  

另请参阅

针对 xml 数据类型的 XQuery 函数