sql >> Base de Datos >  >> RDS >> Mysql

Cómo extraer una subcadena de una cadena en PostgreSQL/MySQL

Problema:

Cómo extraer una subcadena de una cadena en PostgreSQL/MySQL

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;

Otra sintaxis:

SELECT
  email,
  SUBSTRING(email FROM 1 FOR 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 la columna de correo electrónico que comienzan al principio de las cadenas (primer carácter) y van por siete caracteres. La otra notación, SUBSTRING(email FROM 1 FOR 7) , hace exactamente lo mismo. El argumento después del FROM es el índice inicial y el argumento después de FOR es la longitud de la subcadena.

El tercer argumento de SUBSTRING() La función es opcional. Si lo omite, obtendrá la subcadena que comienza en el índice del segundo argumento y llega hasta el final de la cadena. SUBSTRING(email, 1) devolverá la cadena completa, al igual que SUBSTRING(email FROM 1) .

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;

Otra sintaxis:

SELECT
  email,
  SUBSTRING(email FROM POSITION('@' IN email)) 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() funciona 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 utilizar POSITION(character IN column) función, donde el carácter es el carácter específico en el que le gustaría comenzar la subcadena (aquí, @ ) . La columna de argumento es la column desde el que le gustaría recuperar la subcadena; también puede ser una cadena literal.

Si desea que la subcadena llegue hasta el final de la cadena original, el tercer argumento en SUBSTRING() (o la función FOR argumento) no es necesario. De lo contrario, debería ser la longitud de la subcadena, o puede calcularla usando POSITION() función. También puede querer recuperar una subcadena que no termine al final de la cadena sino en algún carácter específico, por ejemplo, antes de '.'. He aquí un ejemplo:

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

Otra sintaxis:

SELECT
  email,
  SUBSTRING(email FROM POSITION('@' IN email) FOR POSITION('.' IN email) - POSITION('@' IN 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 POSITION('.' IN email) - POSITION('@' IN email) simplemente calcula la longitud de la subcadena.