concat, concat_ws și || în PostgreSQL

Funcții pentru text PostgreSQL 9.1+ (operatorul ||: toate versiunile)

Lipesc mai multe texte într-unul. || dă NULL dacă o parte este NULL, concat și concat_ws ignoră valorile NULL.

Sintaxă SQL
text1 || text2
concat(val1, val2, ...)
concat_ws(separator, val1, val2, ...)

Ce face concat, concat_ws și ||

Operatorul || este modul standard SQL de a lipi texte: 'Ana' || ' ' || 'Pop'. Dacă una dintre valori este NULL, tot rezultatul devine NULL.

concat() lipește oricâte valori și tratează NULL ca text gol. concat_ws() (with separator) pune separatorul dat între valori și sare complet peste cele NULL, deci nu rămân separatori dubli.

Ambele funcții primesc orice tip (numere, date) și îl transformă automat în text.

Parametri

Parametru Descriere
separator Pentru concat_ws: textul pus între valori, de exemplu ', '.
val1, val2, ... Valorile de lipit, de orice tip.

Ce returnează

Un text. concat și concat_ws nu returnează NULL din cauza unei valori lipsă (doar concat_ws cu separator NULL).

Exemple

Exemplul 1: Diferența la valori NULL

Al doilea prenume lipsește (NULL). psql afișează NULL ca o celulă goală.

SELECT 'Ana' || ' ' || NULL || 'Pop' AS cu_operator,
       concat('Ana', ' ', NULL, 'Pop') AS cu_concat;

Rezultat în psql

 cu_operator | cu_concat 
-------------+-----------
             | Ana Pop
(1 row)

Exemplul 2: Adresă completă fără virgule în plus

SELECT concat_ws(', ', strada, numar, oras, judet) AS adresa
FROM adrese;

Rezultat în psql

             adresa              
---------------------------------
 Str. Lăpușneanu, 12, Iași, Iași
 Bd. Eroilor, Cluj-Napoca, Cluj
(2 rows)

Exemplul 3: Numere și date în text

SELECT concat('Comanda #', 1042, ' din ', date '2026-10-25', ': ', 149.90, ' lei') AS mesaj;

Rezultat în psql

                  mesaj                   
------------------------------------------
 Comanda #1042 din 2026-10-25: 149.90 lei
(1 row)

Greșeli frecvente

  • Construiești nume complete cu || și unii clienți apar cu numele gol, pentru că o coloană era NULL. Folosește concat_ws sau coalesce.
  • Folosești + pentru texte, ca în alte limbaje: în PostgreSQL 'a' + 'b' dă eroare (operator is not unique sau operator does not exist).

Comenzi înrudite

  • format: Construiește un text dintr-un șablon cu %s, %I și %L. Este modul sigur de a crea SQL dinamic în PL/pgSQL.
  • string_agg: Funcție de agregare care unește valorile text ale unui grup într-un singur text, cu separatorul ales și în ordinea dorită.
  • split_part și string_to_array: split_part returnează bucata n dintr-un text împărțit după separator; string_to_array returnează toate bucățile ca tablou.