Volver a la lista de artículos Artículos
Lectura de 7 minutos

5 Funciones SQL para Manipular Cadenas

Las funciones SQL utilizadas para manipular cadenas, comúnmente llamadas funciones de cadena, se encuentran entre las herramientas más importantes de SQL. En esta entrada, veremos cinco formas de realizar diversas operaciones con cadenas.

Hay muchas funciones SQL que le permiten "editar" datos de cadena. A medida que vayas aprendiendo SQL, verás lo útiles que resultan. Algunas funciones SQL recortan los espacios o caracteres innecesarios; otras le indican la longitud de una cadena. Estas funciones te dan muchas oportunidades para transformar y trabajar con cadenas, lo que hace que tu código sea más eficaz. También hacen que el código sea más fácil de entender.

Todo desarrollador de SQL debería saber qué funciones SQL se utilizan para manipular cadenas. En este post, te ayudaré a empezar explicando cinco funciones de cadena comunes en SQL.

Funciones de cadena SQL: CONCAT

CONCAT(first_char, second_char, ... n_char)

La función de cadenas SQL CONCAT combina dos o más cadenas en una sola. Todas las entradas de entry_char deben ser de tipo CHAR, VARCHAR o NCHAR.

He escrito dos ejemplos sencillos que muestran la utilidad de este comando:

SELECT CONCAT ('LearnSQL is good', ' and great', ' and fantastic!') 
FROM DUAL;
--------------------

LearnSQL is good and great and fantastic!

Como puede ver, CONCAT ha tomado las tres cadenas que he introducido - 1) 'LearnSQL is good'; 2) 'and great'; 3) 'and fantastic!' - y las ha combinado en una nueva cadena SQL. Esta técnica es muy útil cuando queremos presentar la información de la base de datos de forma legible.

Supongamos que tenemos una tabla llamada patient que almacena los números de identificación, los nombres, las fechas de ingreso y las enfermedades de los pacientes. Queremos mostrar los datos de cada paciente de la forma más comprensible posible. La mejor opción es crear una sentencia, como se muestra a continuación:

SELECT CONCAT(name, ' was admitted to St. Ann's Hospital on ', date, ' with ', illness) 
FROM patient
WHERE patient_id = 447;
------------------

John Doe was admitted to St. Ann’s Hospital on 21-11-2016 with flu.

En muchos sistemas de bases de datos, la función de cadena de CONCAT SQL puede sustituirse por el símbolo de concatenación de cadenas "||". Este operador es compatible con los estándares de SQL, pero no funciona en todas las bases de datos; por ejemplo, en SQL Server hay que utilizar "+".

Funciones de cadena SQL: REPLACE

REPLACE(entry_char, string_searching, string_replace)

<pOtra forma de manipular cadenas en SQL es REPLACE. Esta función permite reemplazar o eliminar selectivamente datos del interior de una cadena SQL. Devuelve un entrada_char donde el valor de string_searching es reemplazado por string_replace. Si el valor string_replace es nulo, todos los valores que coincidan con string_searching se elimina de la cadena de entrada.

Veamos dos ejemplos de REPLACE en funcionamiento. Supongamos que queremos actualizar parte de un registro:

SELECT REPLACE ('LearnSQL is good!', 'good', 'great!') 
FROM DUAL;
---------------------

LearnSQL is great!

Como puede ver, REPLACE ha cambiado el valor de good en LearnSQL is good!” to “great. Ahora el registro es el siguiente LearnSQL is great!

Ahora vamos a intentar una demostración más práctica de la manipulación de cadenas con esta función. Supongamos que tiene una tabla llamada registry que almacena los nombres de los empleados. Una empleada llamada Jannet (la única Jannet de la tabla, a efectos de esta ilustración) se ha casado y ha cambiado su apellido. La función REPLACE nos permite actualizar su registro muy fácilmente:

UPDATE registry
SET name = REPLACE(name, 'Kowalski', 'Novak')
WHERE name LIKE 'Jannet%'

Jannet Kowalski es ahora oficialmente Jannet Novak, gracias a la función REPLACE.

Funciones de cadena SQL: SUBSTR

Existen aún más funciones SQL para manipular cadenas. SUBSTR(char, position, length)

SUBSTR toma una porción (o subcadena) de una cadena SQL y la devuelve. Char define lo que queremos utilizar como origen de la subcadena; en el siguiente ejemplo, es LearnSQL. El posición es donde comienza la subcadena; en este caso, 6 caracteres desde el principio. Por último, la longitud define la longitud de la subcadena. Si lo juntamos todo, obtenemos:

SELECT SUBSTR('LearnSQL',6,3) 
FROM DUAL;
-------------------

SQL

Esta función de cadena de SQL se utiliza ampliamente para eliminar caracteres de una cadena grande y para añadir caracteres a una cadena. Supongamos que tiene una tabla llamada products que contiene una lista de productos. El ID del producto está compuesto por letras que identifican el tipo de producto y números que muestran la cantidad disponible.

id
----------
AA91
AA55
BG66
WP21

Supongamos ahora que quiere añadir un guión bajo entre las letras y los números del ID del producto. Con CONCAT y SUBSTR, es fácil:

UPDATE products SET id = CONCAT(SUBSTR(id, 1, 2), '_', SUBSTR(id, 3);
id
----------
AA_91
AA_55
BG_66
WP_21

Veamos estos comandos. UPDATE cambiará el
products tabla. CONCAT conecta las porciones de cadena creadas por dos funciones SUBSTR. Observe que el segundo SUBSTR no tiene un tercer parámetro - incluirá todos los caracteres ubicados después de la posición especificada en el segundo parámetro.

Recuerde que no todos los sistemas de bases de datos utilizan el mismo nombre para las funciones de cadena de SQL Server. En SQL Server, la función SUBSTR se llama SUBSTRING, pero se aplica la misma sintaxis. Haga clic aquí para obtener más información sobre SQL Server.

Funciones de cadena SQL: ASCII y CHR

ASCII(single_character)
CHR(character_code)

ASCII y CHR son dos funciones SQL totalmente opuestas. ASCII mira un solo carácter y devuelve su código numérico ASCII (por ejemplo, "V" es 86). Si se introduce una cadena de caracteres, esta función SQL de cadena devolverá un valor para el primer carácter e ignorará el resto. CHR, por otro lado, toma el código ASCII numérico y devuelve el carácter apropiado. Si se le da un 86, devolverá una "V".

Imaginemos que necesita encontrar a todas las personas cuyo apellido empieza por A. Para ello, ha decidido utilizar el código ASCII. En primer lugar, busquemos el equivalente ASCII de la "A".

SELECT ASCII('A')
FROM DUAL;
-------------------

65

Así que 65 es nuestro número. Ahora podemos encontrar todos los registros necesarios:

SELECT *
FROM workers
WHERE SUBSTR(second_name, 1, 1) = CHR(65);
first_name    second_name     age
---------    ------------     ------
Garry         Amundsen        41
Adam          Anderson        55
Elizabeth     Alanfry         33

Funciones de cadenas SQL: TRIM

TRIM( [ [ LEADING | TRAILING | BOTH ] character FROM ] edit_char )

TRIMEl trabajo principal de SUBSTR es eliminar todos los caracteres especificados caracteres de la parte inicial (encabezado), la parte final (al final), o ambas partes (ambos) de una cadena específica (edit_char).

Esta instrucción tiene muchos parámetros. En primer lugar, debe elegir la parte de la cadena en la que desea cortar los caracteres. Si no lo hace, TRIM eliminará los caracteres definidos tanto del principio como del final de editar_caracteres. A continuación, debe indicarle qué caracteres eliminar. Si se omite este parámetro, la función eliminará sólo los caracteres de espacio. Por último, defina la cadena.

Veamos cómo se ve en la práctica:

Eliminar los espacios iniciales y finales:

SELECT TRIM('    SQL2017    ')
FROM DUAL;
------------------

“SQL2017”
SELECT TRIM ('' FROM  '   SQL2017   ')
FROM DUAL;
------------------

"SQL2017"

Eliminar el '2017' final de la cadena:

SELECT TRIM (TRAILING '2017' FROM 'SQL2017')
FROM DUAL;
------------------

"SQL"

Eliminar los espacios iniciales y finales '20' de la cadena:

SELECT TRIM (BOTH '20' FROM '2017LearnSQL20')
FROM DUAL;
------------------

"17LearnSQL"

Por desgracia, TRIM no tiene la misma sintaxis en todas las bases de datos. En SQL Server, TRIM sólo toma el parámetro edit_char y elimina todos los espacios de ambos extremos de la cadena. LTRIM elimina los espacios iniciales y RTRIM elimina los espacios finales.

Conclusión

Hay muchas funciones SQL que nos permiten manipular cadenas. Lo que hemos discutido en este post es sólo una pequeña fracción de lo que las funciones SQL pueden hacer. Para aprender las funciones de cadena SQL en detalle, consulte nuestro curso en línea LearnSQL.es's Funciones estándar de SQL.