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, SUBSTR(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 un SUBSTR()
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.
>SUBSTR(email, 1, 7) devolverá las subcadenas de los valores en la columna de correo electrónico que comienzan en el primer carácter y van por siete caracteres.
Ejemplo 2:
Le gustaría mostrar la subcadena entre los índices 2 y 6 (inclusive).
Solución 2:
SELECT email, SUBSTR(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 SUBSTR()
funciona igual que en el ejemplo anterior. 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 con el signo @ y termina al final de la cadena, pero no conoce los índices ni las longitudes exactas.
Solución 3:
SELECT email, SUBSTR(email, INSTR(email, '@'), LENGTH(email) - INSTR(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 SUBSTR()
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 INSTR(column, character)
función, donde columna es la cadena literal o la columna de la que desea recuperar la subcadena, y carácter es el character
en el que le gustaría comenzar la subcadena (aquí, @
).
El tercer argumento de SUBSTR()
función es la longitud de la subcadena. Puedes calcularlo usando el INSTR()
y el LENGTH()
funciones Para hacer esto, reste el índice de la longitud de la columna y luego agregue 1:
LENGTH(email) - INSTR(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, SUBSTR(email, INSTR(email, '@'), INSTR(email, '.') - INSTR(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 INSTR(email, '.') - INSTR(email, '@')
simplemente calcula la longitud de la subcadena.