substring (función de XQuery)

Devuelve una parte del valor de $sourceString desde la posición indicada por el valor de $startingLoc, y hasta el número de caracteres indicado por el valor de $length.

Sintaxis

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?

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, sólo se devuelven los caracteres en posiciones mayores que cero. Si es mayor que la longitud de $sourceString, se devuelve la cadena de longitud cero.
  • $length
    [opcional] Número de caracteres que se va a recuperar. Si no se especifica, se devuelven todos los caracteres desde la posición especificada en $startingLoc hasta el final de la cadena.

Notas

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 a partir 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 una secuencia vacía, se trata como una cadena de longitud cero. En caso contrario, si $startingLoc o $length es una secuencia vacía, se devuelve la secuencia vacía.

Ejemplos

En este tema se ofrecen ejemplos de consultas XQuery con instancias XML almacenadas en varias columnas de tipo xml en la base de datos AdventureWorks. Para obtener información general de cada una de estas columnas, vea Representación de tipo de datos xml en la base de datos AdventureWorks.

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

La consulta recupera los 50 primeros caracteres del texto que describe el modelo de producto, el elemento <Summary> 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 elemento <Summary>. Se utiliza esta función porque el elemento <Summary> contiene el texto y los subelementos (elementos de formato HTML) y porque se omitirán estos elementos y se recuperará todo el texto.
  • La función substring() recupera los 50 primeros 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>
...

Limitaciones de la implementación

Éstas son las limitaciones:

  • SQL Server requiere que $startingLoc y $length parameters sean de tipo xs:decimal en lugar de xs:double.
  • SQL Server permite que*$startingLoc* y $length sean una secuencia vacía, porque la secuencia vacía es un valor posible debido a la asignación de errores dinámicos a ().
  • Los pares suplentes UTF-16 de Unicode se cuentan como dos caracteres en lugar de uno.

Vea también

Referencia

Funciones de XQuery con el tipo de datos xml

Ayuda e información

Obtener ayuda sobre SQL Server 2005