基于字符串值的函数 - 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。 有关详细信息,请参阅主题 2016 SQL Server 2016 中数据库引擎功能的中断性变更中的“XQuery 函数是代理项感知”部分。 另请参阅 ALTER DATABASE 兼容性级别 (Transact-SQL) 排序规则和 Unicode 支持

实现限制

SQL Server要求$startingLoc$length参数的类型为 xs:decimal,而不是 xs:double。

SQL Server允许$startingLoc$length为空序列,因为空序列是映射到 () 的动态错误导致的可能值。

示例

本主题提供针对存储在数据库中各种 xml 类型列中的 XML 实例的 AdventureWorks2022 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 () 函数从字符串 () 检索的字符串值中检索前 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 函数