sql >> Base de Datos >  >> RDS >> Database

Cómo extraer una subcadena de una cadena en T-SQL

Problema:

Tiene una columna de cadenas y le gustaría obtener subcadenas de ellas.

Ejemplo 1:

En los emails tabla, hay una columna de correo electrónico. Le gustaría mostrar los primeros siete caracteres de cada correo electrónico.

La tabla se ve así:

correo electrónico
[email protected]
[email protected]
[email protected]
[email protected]

Solución 1:

SELECT
  email,
  SUBSTRING(email, 1, 7) AS substring
FROM emails;

El resultado es:

correo electrónico subcadena
[email protected] jake99@
[email protected] tamarab
[email protected] nota@
[email protected] Jessica

Discusión:

Usa la SUBSTRING() función. El primer argumento es la cadena o el nombre de la columna. El segundo argumento es el índice del carácter en el que debe comenzar la subcadena. El tercer argumento es la longitud de la subcadena.

¡Cuidado! A diferencia de otros lenguajes de programación, los índices comienzan en 1 , no 0. Esto significa que el primer carácter tiene índice 1, el segundo carácter tiene índice 2, etc.

SUBSTRING(email, 1, 7) devolverá las subcadenas de los valores en el email columna que comienza en el primer carácter y tiene siete caracteres.

Ejemplo 2:

Le gustaría mostrar la subcadena entre los índices 2 y 6 (inclusive).

Solución 2:

SELECT
  email,
  SUBSTRING(email, 2, 5) AS substring
FROM emails;

El resultado es:

correo electrónico subcadena
[email protected] ake99
[email protected] amara
[email protected] otina
[email protected] essic

Discusión:

Usas el SUBSTRING() funcionan como en los ejemplos anteriores. Esta vez, el segundo argumento de la función es 2 , ya que queremos comenzar en el índice 2. La longitud de la subcadena es 5 (end_index - start_index + 1 ).

Ejemplo 3:

Le gustaría mostrar la subcadena que comienza en @ firma y termina al final de la cadena, pero no conoce los índices ni las longitudes exactas.

Solución 3:

SELECT
  email,
  SUBSTRING(email, CHARINDEX('@', email), LEN(email) - CHARINDEX('@', email) + 1) AS substring
FROM emails;

El resultado es:

correo electrónico subcadena
[email protected] @gmail.com
[email protected] @zoho.com
[email protected] @yahoo.fr
[email protected] @onet.pl

Discusión:

Usas el SUBSTRING() funcionan como en los ejemplos anteriores. Esta vez, está buscando un personaje específico cuya posición puede variar de una fila a otra. Para encontrar el índice del carácter específico, puede usar el CHARINDEX(character, column) función donde carácter es el carácter específico en el que le gustaría comenzar la subcadena (aquí, @ ). La columna de argumento es la columna de la que desea recuperar la subcadena; también puede ser una cadena literal.

El tercer argumento de SUBSTRING() función es la longitud de la subcadena. Puedes calcularlo usando CHARINDEX() y el LEN() funciones Para hacer esto, reste el índice de la longitud de la columna y luego agregue 1:

LEN(email) - CHARINDEX('@', email) + 1

También es posible que desee recuperar una subcadena que no termine al final de la cadena sino en algún carácter específico, por ejemplo, antes de '. '. Así es como puedes hacer esto:

SELECT
  email,
  SUBSTRING(email, CHARINDEX('@', email), CHARINDEX('.', email) - CHARINDEX('@', email)) AS substring
FROM emails;

El resultado de esta consulta es:

correo electrónico subcadena
[email protected] @gmail
[email protected] @zoho
[email protected] @yahoo
[email protected] @onet

La parte CHARINDEX('.', email) - CHARINDEX('@', email) simplemente calcula la longitud de la subcadena.