Geekflare cuenta con el apoyo de nuestra audiencia. Podemos ganar comisiones de afiliados comprando enlaces en este sitio.
In base de datos Última actualización: 30 de agosto de 2023
Comparte en:
Escáner de seguridad de aplicaciones web Invicti – la única solución que ofrece verificación automática de vulnerabilidades con Proof-Based Scanning™.

¿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 sintaxis CONCAT_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 C.
    Autor
    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 MohanMittal
    Editora

    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
Gracias a nuestros patrocinadores
Más lecturas excelentes en la base de datos
Impulse su negocio
Algunas de las herramientas y servicios para ayudar a que su negocio crezca.
  • Invicti utiliza Proof-Based Scanning™ para verificar automáticamente las vulnerabilidades identificadas y generar resultados procesables en cuestión de horas.
    Prueba Invicti
  • Web scraping, proxy residencial, administrador de proxy, desbloqueador web, rastreador de motores de búsqueda y todo lo que necesita para recopilar datos web.
    Prueba Brightdata
  • Monday.com es un sistema operativo de trabajo todo en uno para ayudarlo a administrar proyectos, tareas, trabajo, ventas, CRM, operaciones, workflows, y más.
    Intente Monday
  • Intruder es un escáner de vulnerabilidades en línea que encuentra debilidades de ciberseguridad en su infraestructura, para evitar costosas filtraciones de datos.
    Intente Intruder