Funciones usadas en valores de cadena: substring

Se aplica a:SQL Server

Devuelve parte del valor de $sourceString, comenzando en la posición indicada por el valor de $startingLoc y continúa para el número de caracteres indicado por el valor de $length.

Sintaxis

  
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?  

Argumentos

$sourceString
Cadena de origen.

$startingLoc
Punto inicial de la cadena de origen donde comienza la subcadena. Si este valor es negativo o es 0, solo se devuelven los caracteres en posiciones mayores que cero. Si es mayor que la longitud de la $sourceString, se devuelve la cadena de longitud cero.

$length
[opcional] Número de caracteres que se va a recuperar. Si no se especifica, devuelve todos los caracteres de la ubicación especificada en $startingLoc hasta el final de la cadena.

Comentarios

La versión de la función con tres argumentos devuelve los caracteres de $sourceString cuya posición $p sea:

fn:round($startingLoc) <= $p < fn:round($startingLoc) + fn:round($length)

El valor de $length puede ser mayor que el número de caracteres del valor de $sourceString después de la posición inicial. En este caso, la subcadena devuelve los caracteres hasta el final de $sourceString.

El primer carácter de una cadena se encuentra en la posición 1.

Si el valor de $sourceString es la secuencia vacía, se controla como la cadena de longitud cero. De lo contrario, si $startingLoc o $length es la secuencia vacía, se devuelve la secuencia vacía.

Caracteres adicionales (pares suplentes)

El comportamiento de pares suplentes en las funciones XQuery depende del nivel de compatibilidad de la base de datos y, en algunos casos, del URI del espacio de nombres predeterminado de las funciones. Para obtener más información, vea la sección "XQuery Functions Are Surrogate-Aware" en el tema Cambios importantes en las características del motor de base de datos en SQL Server 2016. Consulte también Alter DATABASE Compatibility Level (Transact-SQL) and Collation and Unicode Support (Nivel de compatibilidad de ALTER DATABASE [Transact-SQL]) y compatibilidad con Intercalación y Unicode.

Limitaciones de la implementación

SQL Server requiere que los parámetros$startingLoc y $length sean de tipo xs:decimal en lugar de xs:double.

SQL Server permite que $startingLoc y $length sean la secuencia vacía, ya que la secuencia vacía es un valor posible como resultado de errores dinámicos asignados a ().

Ejemplos

En este tema se proporcionan ejemplos de XQuery en las instancias XML almacenadas en varias columnas de tipo xml de la AdventureWorks2022 base de datos.

A. Utilizar la función substring() de XQuery para recuperar descripciones resumidas parciales de modelos de productos

La consulta recupera los primeros 50 caracteres del texto que describe el modelo de producto, el <Summary> elemento del documento.

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;  

Observe lo siguiente en la consulta anterior:

  • La función string() devuelve el valor de cadena del<Summary> elemento. Esta función se usa, ya que el <Summary> elemento contiene el texto y los subelementos (elementos de formato html), y porque omitirá estos elementos y recuperará todo el texto.

  • La función substring() recupera los primeros 50 caracteres del valor de cadena recuperado por string().

Éste es un resultado parcial:

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>  
...  

Consulte también

Funciones de XQuery con el tipo de datos xml