¿Quiere concatenar dos o más columnas de cadena en SQL? Aprenda a utilizar la función CONCAT de SQL para concatenar cadenas.
Cuando consulta una tabla de base de datos, es posible que a veces necesite concatenar varias columnas de texto/cadena en lugar de recuperar datos de una sola columna. Esto es útil cuando necesita un resultado más fácil de interpretar y legible.
Por ejemplo, puede seleccionar un full_name
campo concatenando el first_name
y last_name
campos. Del mismo modo, puede obtener el full_address
concatenando la calle, la ciudad, el estado y otros campos necesarios.
En SQL, puede utilizar la función CONCAT para concatenar cadenas. En esta guía, repasaremos:
- La sintaxis de la función SQL CONCAT
- Ejemplos de uso
- Manejo de valores NULL en una o más columnas durante la concatenación
¡Vamos a empezar!
Syntax of the SQL CONCAT Function
La sintaxis para utilizar la función SQL CONCAT es la siguiente:
CONCAT(string_1, string_2, ..., string_n);
Aquí, string_1
, string_2
, ..., string n
denota las cadenas que se van a concatenar. Pueden ser cadenas literales o columnas o una combinación de ambos.
Concatenating String Literals with CONCAT
Debido a que la función CONCAT también se puede usar para concatenar cadenas literales, intentemos codificar un ejemplo simple.
Aquí concatenamos las cadenas 'Hola' y '¡mundo!' como el greeting
cuerda:
SELECT CONCAT('Hello, ', 'world!') AS greeting;
Al ejecutar la consulta anterior obtendrá el siguiente resultado:
+---------------+
| greeting |
+---------------+
| Hello, world! |
+---------------+
1 row in set (0.00 sec)
En la práctica, sin embargo, es posible que desee concatenar las columnas requeridas en una tabla de base de datos y no cadenas literales. Entonces, codifiquemos algunos ejemplos usando la función CONCAT en SQL.
How to Concatenate Columns in SQL
A continuación, pasemos a consultar una tabla de base de datos.
📑 Todas las consultas de muestra de este tutorial se ejecutaron en un MySQL tabla de base de datos. Pero también puedes seguirlo en otro RDBMS de tu elección.
Creación de una tabla de base de datos con registros
Creemos una base de datos que podamos usar:
CREATE DATABASE db1;
use db1;
Vamos a crear un employees
tabla en la base de datos db1
. Para hacerlo, ejecute el CREATE TABLE
declaración con las siguientes columnas y tipos de datos correspondientes:
CREATE TABLE employees (
ID INT AUTO_INCREMENT PRIMARY KEY,
first_name VARCHAR(50),
last_name VARCHAR(50),
street VARCHAR(100),
city VARCHAR(50),
state VARCHAR(2),
username VARCHAR(20)
);
A continuación, insertemos algunos registros en el employees
mesa:
INSERT INTO employees (first_name, last_name, street, city, state, username) VALUES
('John', 'Smith', '123 Main St', 'New York', 'NY', 'john123'),
('Alice', 'Johnson', '456 Elm St', 'Boston', 'MA', 'alice456'),
('Bob', 'Williams', '789 Oak St', 'Chicago', 'IL', 'bob789'),
('Mary', 'Davis', '321 Pine St', 'Houston', 'TX', 'mary456'),
('James', 'Brown', '555 Cedar St', 'Seattle', 'WA', 'james789'),
('Emily', 'Jones', '777 Maple St', 'Atlanta', 'GA', 'emily123'),
('Michael', 'Miller', '999 Birch St', 'Miami', 'FL', 'michael456'),
('Jessica', 'Wilson', '111 Walnut St', 'Dallas', 'TX', 'jessica789'),
('William', 'Taylor', '222 Cherry St', 'Denver', 'CO', 'william123'),
('Sarah', 'Martinez', '444 Pine St', 'Phoenix', 'AZ', 'sarah456');
Ejemplo 1: Mostrar nombres completos
Como primer ejemplo, concatenemos el first_name
y last_name
columnas para obtener el full_name
. Para hacerlo, podemos usar la función SQL CONCAT en la consulta SELECT como se muestra:
SELECT CONCAT(first_name, ' ', last_name) AS full_name FROM employees;
Debería obtener el siguiente resultado:
+----------------+
| full_name |
+----------------+
| John Smith |
| Alice Johnson |
| Bob Williams |
| Mary Davis |
| James Brown |
| Emily Jones |
| Michael Miller |
| Jessica Wilson |
| William Taylor |
| Sarah Martinez |
+----------------+
10 rows in set (0.00 sec)
Además de la first_name
y last_name
, observe que también hemos utilizado el espacio como separador, especificado por la cadena literal ''.
Ejemplo 2: Construir direcciones
Ahora tomemos otro ejemplo.
Tenemos el street
, city
y state
columnas en el employees
mesa. Así podemos seleccionar el full_address
concatenando estos tres campos con una coma como separador:
SELECT CONCAT(street, ', ', city, ', ', state) AS full_address FROM employees;
Aquí está la salida:
+---------------------------+
| full_address |
+---------------------------+
| 123 Main St, New York, NY |
| 456 Elm St, Boston, MA |
| 789 Oak St, Chicago, IL |
| 321 Pine St, Houston, TX |
| 555 Cedar St, Seattle, WA |
| 777 Maple St, Atlanta, GA |
| 999 Birch St, Miami, FL |
| 111 Walnut St, Dallas, TX |
| 222 Cherry St, Denver, CO |
| 444 Pine St, Phoenix, AZ |
+---------------------------+
10 rows in set (0.00 sec)
Ejemplo 3: Crear URL de perfil
Recordemos que tenemos un username
en el campo employees
mesa.
Digamos que tienes un dominio raíz https://www.example.com/
y los perfiles de usuario están en https://www.example.com/user
. Puedes generar el profile_url
usando la función CONCAT así:
SELECT CONCAT('https://www.example.com/user/', username) AS profile_url
FROM employees;
Como se ve, obtenemos las URL del perfil de todos los empleados:
+-----------------------------------------+
| profile_url |
+-----------------------------------------+
| https://www.example.com/user/john123 |
| https://www.example.com/user/alice456 |
| https://www.example.com/user/bob789 |
| https://www.example.com/user/mary456 |
| https://www.example.com/user/james789 |
| https://www.example.com/user/emily123 |
| https://www.example.com/user/michael456 |
| https://www.example.com/user/jessica789 |
| https://www.example.com/user/william123 |
| https://www.example.com/user/sarah456 |
+-----------------------------------------+
10 rows in set (0.00 sec)
Handling NULL Values
En la tabla de empleados, todos los registros tienen todos los campos. Pero ¿qué pasa si tienes uno o más campos con valores NULL?
Pongamos un ejemplo para este caso. Aquí nosotros actualizar el registro correspondiente a ID = 2 para establecer la columna de la calle en NULL:
UPDATE employees
SET street = NULL
WHERE ID = 2; -- Update the record with ID 2
Query OK, 1 row affected (0.05 sec)
Rows matched: 1 Changed: 1 Warnings: 0
Ahora usamos CONCAT para seleccionar el full_address
:
SELECT CONCAT(street, ', ', city, ', ', state) AS full_address FROM employees;
Aquí está la salida:
+---------------------------+
| full_address |
+---------------------------+
| 123 Main St, New York, NY |
| NULL |
| 789 Oak St, Chicago, IL |
| 321 Pine St, Houston, TX |
| 555 Cedar St, Seattle, WA |
| 777 Maple St, Atlanta, GA |
| 999 Birch St, Miami, FL |
| 111 Walnut St, Dallas, TX |
| 222 Cherry St, Denver, CO |
| 444 Pine St, Phoenix, AZ |
+---------------------------+
10 rows in set (0.00 sec)
Observe que el segundo elemento del conjunto de resultados es NULL.
Pero nos hubiera gustado que el resultado fuera la concatenación del city
y state
columnas para tener una idea aproximada de la dirección. Cuando tenga tales valores NULL, puede usar CONCAT_WS como alternativa a la función CONCAT. Vamos a ver cómo funciona.
Uso de CONCAT_WS para manejar valores NULL durante la concatenación
CONCAT_WS es una alternativa a CONCAT que se puede utilizar si sospecha que uno o más campos contienen valores NULL.
Puedes usar la función CONCAT_WS así:
CONCAT_WS(separator, string_1, string_2,..., string_n)
Ahora ejecute la siguiente consulta SELECT:
SELECT CONCAT_WS(', ', street, city, state) AS full_address FROM employees;
Obtendrá el siguiente resultado:
+---------------------------+
| full_address |
+---------------------------+
| 123 Main St, New York, NY |
| Boston, MA |
| 789 Oak St, Chicago, IL |
| 321 Pine St, Houston, TX |
| 555 Cedar St, Seattle, WA |
| 777 Maple St, Atlanta, GA |
| 999 Birch St, Miami, FL |
| 111 Walnut St, Dallas, TX |
| 222 Cherry St, Denver, CO |
| 444 Pine St, Phoenix, AZ |
+---------------------------+
10 rows in set (0.01 sec)
Como se ve, para el segundo elemento del conjunto de resultados, obtenemos 'Boston MA' como street
El campo es NULO.
⚠ Al usar CONCAT_WS, es Requisitos para especificar el separador. Si no especifica el separador, el resultado es NULL si una o más columnas son NULL (similar a CONCAT).
Resumen
Repasemos lo que hemos aprendido:
- Cuando consulta una tabla de base de datos para recuperar datos, es posible que desee concatenar varias columnas de cadena para obtener resultados de consulta más útiles y fáciles de interpretar. Para hacerlo, puede utilizar la función CONCAT en SQL con la sintaxis
CONCAT(string_1, string_2, ..., string_n)
. - Puede concatenar cadenas literales, columnas o una combinación de ambas. Sin embargo, si hay uno o más valores NULL, el resultado para ese registro en particular es NULL. Para manejar esto, puedes usar
CONCAT_WS
con la sintaxisCONCAT_WS(separator, string_1, string_2, ..., string_n)
. CONCAT_WS
maneja valores NULL de manera más elegante al concatenar solo aquellas cadenas que están presentes usando el separador especificado.
Para una revisión rápida de los comandos SQL y su uso, puede marcar esto como favorito Hoja de referencia de SQL.
-
Bala Priya es un desarrollador y escritor técnico de India con más de tres años de experiencia en el espacio de redacción de contenido técnico. Comparte su aprendizaje con la comunidad de desarrolladores mediante la creación de tutoriales técnicos, guías prácticas y más... LEER MÁS
-
Narendra Mohan Mittal es estratega senior de marca digital y editor de contenido con más de 12 años de experiencia versátil. Tiene un M-Tech (Medallista de oro) y B-Tech (Medallista de oro) en Informática e Ingeniería.
... LEER MÁS