Concatenating Strings in PostgreSQL

String concatenation, the process of joining two or more strings together, is a fundamental operation in SQL and particularly in PostgreSQL. PostgreSQL offers two primary methods for concatenating strings: using the || operator and the CONCAT() function. Each method has its advantages and use cases, which we'll explore through examples.

Using the || Operator

The || operator is a straightforward and commonly used method for concatenating strings in PostgreSQL. It allows you to join two or more string values seamlessly. Here's a basic example:


SELECT 'Hello, ' || 'world!' AS greeting;

This query concatenates the strings 'Hello, ' and 'world!' to produce the output 'Hello, world!'. The || operator is versatile and can be used to concatenate columns, strings, and even the results of functions:


SELECT first_name || ' ' || last_name AS full_name

FROM employees;

In this example, first_name and last_name columns are concatenated with a space in between to form a full name.

Using the CONCAT() Function

The CONCAT() function provides a more explicit and function-based approach to string concatenation. It can take two or more string arguments and join them together. Here's how you can use CONCAT():


SELECT CONCAT('Hello, ', 'world!') AS greeting;

This accomplishes the same as the previous || example, concatenating 'Hello, ' and 'world!'. CONCAT() is particularly useful when dealing with NULL values, as it treats NULL as an empty string and continues concatenation with the other non-null values:


SELECT CONCAT(first_name, ' ', middle_name, ' ', last_name) AS full_name

FROM employees;

If middle_name is NULL, CONCAT() will skip it and directly concatenate first_name, a space, and last_name, avoiding the pitfall of the || operator, which would return NULL if any of the operands is NULL.

Comparing || and CONCAT()

  • Readability: CONCAT() can be more readable, especially for those new to SQL or programming, as it clearly indicates the intention to concatenate strings. The || operator, while concise, might not be as immediately obvious to all users.

  • Handling NULLs: A significant advantage of CONCAT() over || is its handling of NULL values. CONCAT() treats NULL values as empty strings, ensuring the concatenation process continues smoothly. In contrast, using ||, if any operand is NULL, the result of the operation is NULL, which can be undesirable in many contexts.

  • Versatility: Both methods are versatile, but the || operator might be preferred for its conciseness in complex SQL queries where space and readability of numerous concatenations are a concern.

Concatenating Strings with a Separator

In some cases, you might need to concatenate strings with a separator, such as a comma or a space. The CONCAT_WS() function is designed for this purpose. It takes a separator as the first argument, followed by two or more strings to concatenate. Here's an example:


SELECT CONCAT_WS(', ', first_name, last_name) AS full_name

FROM employees;

In this example, the CONCAT_WS() function concatenates first_name and last_name with a comma and a space in between, producing a full name with a separator. You can read more about the CONCAT_WS() function in here.

Conclusion

Choosing between the || operator and CONCAT() function depends on your specific requirements, including how you wish to handle NULL values and personal or team preferences for readability. For scenarios where NULL values are prevalent and should not disrupt the concatenation, CONCAT() is the safer choice. For simpler, more concise concatenations where the operands are guaranteed not to be NULL, the || operator offers an elegant solution.