Programa
Trabajar con bases de datos relacionales a menudo implica manejar datos desordenados. Uno de los retos más comunes es la limpieza y el tratamiento de los datos de texto. Por suerte, SQL proporciona potentes funciones de cadena que pueden hacer este proceso mucho más eficiente, ahorrándote tiempo y esfuerzo.
En este artículo, vamos a explorar las funciones de cadena SQL más importantes que pueden ayudarte a limpiar y manipular datos de texto con facilidad. ¡Empecemos!
¿Qué son las funciones de cadena SQL?
Las Funciones de Cadena SQL son funciones incorporadas que nos permiten manipular y procesar datos de texto almacenados en una base de datos. Algunos ejemplos habituales de campos de texto son los nombres, las descripciones y las direcciones.
Estas funciones pueden utilizarse para realizar una amplia gama de tareas, entre ellas:
- Concatenar cadenas
- Formatear texto
- Extracción de partes de una cadena
- Buscar y sustituir un texto específico dentro de una cadena
Concatenar cadenas en SQL
Podemos concatenar dos o más cadenas utilizando la función concat():
SELECT CONCAT('Street Roma',', ','72',', ','Padova') AS full_address
Este es el resultado:
full_address |
-----------------------+
Street Roma, 72, Padova|
Esta función se utiliza mucho para combinar información proporcionada por distintas columnas, como nombres y direcciones.
Como alternativa, también puedes utilizar la función CONCAT_WS():
SELECT CONCAT_WS(',','Street Roma','72','Padova') as full_address
Por la sintaxis, puedes observar que es más fácil y eficaz en situaciones en las que quieras combinar más de dos columnas con el mismo separador.
Formatear texto
Se trata de varias funciones de cadena SQL para ajustar el texto cambiando las mayúsculas y minúsculas, eliminando los espacios sobrantes y otras operaciones. Cada función se enumera con su sintaxis y la descripción correspondiente.
|
Sintaxis de la función |
Descripción |
| LOWER(cadena) |
Devuelve el texto con todos los caracteres en minúsculas |
| SUPERIOR(cadena) |
Devuelve el texto con todos los caracteres en mayúsculas |
| TRIM(cadena, [carácter]) |
Elimina los espacios en blanco de los lados izquierdo y derecho de la cadena por defecto, carácter especial si se especifica |
| LTRIM(string, [character]) |
Elimina los espacios en blanco de la izquierda de la cadena por defecto, carácter especial si se especifica |
| RTRIM(string, [character]) |
Elimina los espacios en blanco de la derecha de la cadena por defecto, carácter especial si se especifica |
Ahora, vamos a mostrar algunos ejemplos para entender cómo aplicar estas funciones. Imagina un caso en el que tienes direcciones de correo electrónico con caracteres en mayúsculas y las siglas del estado en minúsculas, y quieres cambiar para corregir el formato de estas columnas.
SELECT
LOWER('ANONymous@gmail.com') AS email,
UPPER('it') AS country
El resultado es el siguiente:
email |country|
-------------------+-------+
anonymous@gmail.com|IT |
Además de cambiar las mayúsculas y minúsculas, también puede ser útil eliminar los espacios en blanco al principio o al final de las cadenas. La función principal de este tipo de operación es TRIM() eliminar de ambos lados. Otras alternativas son LTRIM() y RTRIM() para eliminar los espacios en blanco de los lados izquierdo y derecho respectivamente:
SELECT TRIM(' Street Roma, 72 ') AS trimmed_address,
LTRIM(' Street Roma, 72 ') AS ltrimmed_address,
RTRIM(' Street Roma, 72 ') AS rtrimmed_address
La consulta devuelve el siguiente resultado:
trimmed_address|ltrimmed_address|rtrimmed_address|
---------------+----------------+----------------+
Street Roma, 72|Street Roma, 72 | Street Roma, 72|
A partir de la salida, puedes captar las diferencias entre cada función. Además, se puede aplicar TRIM() para eliminar otros caracteres especiales, además de los espacios en blanco. Por ejemplo, queremos limpiar el campo del teléfono deshaciéndonos del signo +:
SELECT TRIM('++345','+') AS telephone
La salida devuelta es la siguiente:
telephone|
---------+
345 |
Como puedes ver, el número de teléfono está completamente limpio.
Extraer texto
Después de concatenar y modificar el formato de las cadenas, es hora de descubrir cómo extraer texto utilizando la función especial de SQL SUBSTRING(). Vamos a mostrar distintos ejemplos para dominar esta función:
SELECT
SUBSTRING('Antony',1,1) AS first_character,
SUBSTRING('Antony',1,3) AS first_3characters,
SUBSTRING('Antony',1,5) AS first_5characters
Este es el resultado:
first_character|first_3characters|first_5characters|
---------------+-----------------+-----------------+
A |Ant |Anton |
También podemos combinar esta función con las anteriores para poner en mayúsculas el primer carácter, convertir el resto de letras a minúsculas y, después, concatenar todas las letras:
SELECT
LENGTH('antony') AS lenght_name,
SUBSTRING(UPPER('antony'),1,1) AS first_character,
SUBSTRING(LOWER('antony'),2,LENGTH('antony')) AS last_characters,
CONCAT(SUBSTRING(UPPER('antony'),1,1),SUBSTRING(LOWER('antony'),
2,LENGTH('antony'))) AS name
Esta consulta devuelve el siguiente resultado:
lenght_name|first_character|LAST_characters|name |
-----------+---------------+---------------+------+
6|A |ntony |Antony|
Además de las funciones vistas hasta ahora, puedes fijarte en la función LENGTH() que ayuda a extraer la longitud de la cadena. En este contexto, es útil especificar el índice del último carácter.
Buscar y reemplazar cadenas en SQL
Podemos mostrar las principales funciones para buscar y sustituir cadenas:
|
Sintaxis de la función |
Descripción |
| REEMPLAZAR(cadena,x,y) |
Sustituye el valor x de la cadena por el valor y |
| CHARINDEX(x,cadena) |
Busca la posición del valor x dentro de la cadena |
Una función muy útil es REPLACE() para sustituir una subcadena por otra subcadena dentro de la cadena:
SELECT
'Street Roma - 32' AS address,
replace('Street Roma - 32','-',',') AS cleaned_address
Este es el resultado:
address |cleaned_address |
----------------+----------------+
Street Roma - 32|Street Roma , 32|
En este caso, acabamos de sustituir un guión por una coma dentro de la dirección. También podemos intentar encontrar la posición del guión dentro de la dirección:
SELECT
'Street Roma - 32' AS address,
LENGTH('Street Roma - 32') AS length_address,
CHARINDEX('-','Street Roma - 32') AS location_dash
La consulta devuelve el siguiente resultado:
address |length_address|location_dash|
----------------+--------------+-------------+
Street Roma - 32| 16| 13|
Podemos observar que el símbolo - está en la posición 13 de la dirección, casi al final de la cadena.
Conclusión
Dominar estas funciones de cadena SQL puede marcar la diferencia a la hora de limpiar los datos con eficacia. Por supuesto, el artículo no cubre todas las funciones, sino sólo una breve lista de las más importantes. No todas las funciones SQL son siempre válidas y pueden cambiar según el tipo de base de datos que utilices. Por ejemplo, CHARINDEX puede sustituirse por LOCATE() en una base de datos MySQL.
Para practicar con estas funciones, puedes consultar nuestro Informes en SQL en SQL. Puede ayudarte a convertirte en un experto en limpieza de datos y elaboración de informes complejos. También recomendamos el Fundamentos de SQL para cubrir todos los aspectos esenciales de SQL.
