Problema:
Quiere extraer una subcadena del texto en una columna dada.
Ejemplo:
Nuestra base de datos tiene una tabla llamada web_address
con datos en las columnas id
y address
. Queremos eliminar el 'www.
' al principio y el '.com
’ al final de cada address
.
id | dirección |
---|---|
1 | www.ejemplo.com |
2 | www.google.com |
3 | www.learnsql.com |
Solución 1:
Para eliminar los primeros 4 caracteres:
SELECT SUBSTR(address, 5, LENGTH(address) -4) AS substring FROM web_address;
Para eliminar los últimos 4 caracteres:
SELECT SUBSTR(address, 1, LENGTH(address) -4) AS substring FROM web_address;
Para eliminar los primeros 4 caracteres y los últimos 4 caracteres:
SELECT SUBSTR(address, 5, LENGTH(address) -8) AS substring FROM web_address;
Solución 2:
Para eliminar los primeros 4 caracteres:
SELECT SUBSTRING(address, 5, LENGTH(address)) AS substring FROM web_address;
Para eliminar los últimos 4 caracteres:
SELECT SUBSTRING(address, 1, LENGTH(address) -4) AS substring FROM web_address;
Para eliminar los primeros 4 caracteres y los últimos 4 caracteres:
SELECT SUBSTRING(address, 5, LENGTH(address) -8) AS substring FROM web_address;
Solución 3:
Para eliminar todos los caracteres antes del segundo '.' desde la derecha:
SELECT SUBSTRING_INDEX(address, '.', -2) AS substring FROM web_address;
Para eliminar todos los caracteres después del segundo '.' desde la izquierda:
SELECT SUBSTRING_INDEX(address, '.', 2) AS substring FROM web_address;
Para eliminar todos los caracteres después del segundo '.' desde la izquierda, elimine todos los caracteres antes del primer '.' desde la derecha:
SELECT SUBSTRING_INDEX( SUBSTRING_INDEX(address, '.', 2), '.', -1 ) AS substring FROM web_address;
El resultado es:
subcadena |
---|
ejemplo |
aprender sql |
Discusión:
Tanto la primera como la segunda solución eliminan un número específico de caracteres del texto con SUBSTR()
o SUBSTRING()
función. SUBSTR()
es un sinónimo de SUBSTRING()
. Ambos requieren la cadena y la posición inicial como argumentos. El último argumento, que define el número de caracteres a extraer, es opcional. Si se omite el último argumento, se devolverá la cadena completa (desde el punto de inicio).
En la tercera solución, SUBSTRING_INDEX()
La función elimina el texto antes o después de los caracteres especificados. Requiere como argumentos la cadena, el carácter y cuántas instancias del carácter se deben encontrar donde comienza la extracción del texto.