Oracle CONCAT Function with Examples

The Oracle CONCAT function is not a very widely used function, but still helpful. Learn more about the CONCAT function in this article.

Purpose of the Oracle CONCAT Function

The Oracle CONCAT function allows you to join, or concatenate, two strings together. It's part of standard string manipulation in many programming languages.

For example:

string1 = "Yes "

string2 = "Please"

To concatenate these strings means to join them together.

string3 = "Yes Please"

Syntax

The syntax of the Oracle CONCAT function is:

1CONCAT( string1, string2 )

The string that is returned is the same data type as string1, which can be any of CHAR, VARCHAR2, NCHAR, NVARCHAR2, CLOB or NCLOB. However, if you're converting two different data types, the type returned is one that results in a "lossless" conversion. In other words, it keeps the LOB or the Unicode data type if one exists.

The function only allows you to concatenate two strings together. If you want to concatenate multiple strings, you can use nested functions, or the double pipe character, as mentioned below.

Parameters

The parameters of the Oracle CONCAT function are:

  • string1 (mandatory): The first string to concatenate as part of this function.
  • string2 (mandatory): The second string to concatenate as part of this function.

The parameters are quite simple compared to other functions that we've looked at so far. Both parameters are mandatory and are both string data types.

Let's have a look at some questions about using the CONCAT function and then some examples.

What's the Difference between Oracle CONCAT vs Pipe?

In short, there is no difference in how the concatenation is done.

The purpose of the CONCAT function is to allow scripts to perform concatenation when moving between systems that have different character sets (and therefore may not support the vertical bars or pipes). As stated by Oracle, this was provided as an alternative to the vertical bars.

In most cases, you can use the double pipe || as concatenation, for several reasons:

  • It's the ANSI standard
  • It's easier to read
  • It allows for multiple strings to be concatenated (more than the two permitted by CONCAT)
  • It has similar performance

A StackOverflow experiment was run that compared CONCAT and || over a loop of 100 million and found almost identical performance.

Can You Use Oracle CONCAT with Column Values?

Yes, you can. Refer to the Examples section below to see how you can use it with column values. If you want to add a space or other character in between, you'll need to add another nested CONCAT function.

Can You Use Oracle CONCAT on Rows and Group By Rows?

If you want to concatenate values from multiple rows in Oracle, then you don't need to use the CONCAT function. In Oracle 11g onwards, you can use the LISTAGG function.

I haven't included an example here, but when the page for the Oracle LISTAGG function gets published, an example will be included there.

Can Oracle CONCAT CLOB Fields?

Yes, you can use Oracle CONCAT on CLOB fields. It can be used on CLOB or NCLOB data types.

Some example scripts use different functions and loops, but with recent versions of Oracle, you can use this function on CLOBs.

How Can You Use Oracle CONCAT with Space?

To concatenate two fields together and include a space between them essentially means you're concatenating three fields:

  • Field 1
  • Space
  • Field 2

To do this, you'll need to use nested CONCAT functions, to concatenate one field with a space, and then use that result to concatenate with the second field. It can be done in either order.

Refer to the Examples section below for more information.

Examples of the Oracle CONCAT Function

Here are some examples of the CONCAT function. I find that examples are the best way for me to learn about code, even with the explanation above.

Example 1

This is a basic example of the CONCAT function.

1SELECT CONCAT ('Databases ', 'are great') AS NEW_CONCAT
2FROM DUAL;

Result:

NEW_CONCAT
Databases are great

As you can see, the two string values have been joined together.

Example 2

This example uses two column values.

1SELECT CONCAT (first_name, last_name) AS NEW_CONCAT
2FROM customers;

Result:

NEW_CONCAT
JohnSmith
SallyJones
SteveBrown
AdamCooper
JoshThompson
PeterManson
MarkAllan

This shows the first name and last name concatenated, but without a space in between.

Example 3

This example shows two strings concatenated, but one has a Unicode value.

1SELECT CONCAT('My ', 'Résumé') AS NEW_CONCAT
2FROM DUAL;

Result:

NEW_CONCAT
My Résumé

The result actually includes the Unicode characters and doesn't change them to fit the data type of the first parameter.

Example 4

This example uses a CLOB value (full_address) in the concatenation.

1SELECT CONCAT(full_address, country) AS NEW_CONCAT
2FROM customers;

Result:

NEW_CONCAT
10 Long RoadUSA
50 Market StreetUSA
201 Flinders LaneCanada
14 Wellington RoadUSA
80 Victoria Street
5 Johnson StFrance
8 Smith StreetUK

The address and country are concatenated just like any other string value.

Example 5

We can also use double pipes to concatenate values.

1SELECT first_name || last_name AS NEW_CONCAT
2FROM customers;

Result:

NEW_CONCAT
JohnSmith
SallyJones
SteveBrown
AdamCooper
JoshThompson
PeterManson
MarkAllan

This shows both first_name and last_name concatenated together, in the same way as Example 2.

Example 6

This example uses a nested CONCAT function to join three strings together.

1SELECT
2CONCAT(CONCAT(first_name, last_name), country) AS NEW_CONCAT
3FROM customers;

Result:

NEW_CONCAT
JohnSmithUSA
SallyJonesUSA
SteveBrownCanada
AdamCooperUSA
JoshThompson
PeterMansonFrance
MarkAllanUK

This result joins the first_name, last_name, and country values together, but without spaces.

Example 7

This example joins several strings using nested CONCAT functions, and also includes a space.

1SELECT
2CONCAT(CONCAT(full_address, ', '), country) AS NEW_CONCAT
3FROM customers;

Result:

NEW_CONCAT
10 Long Road, USA
50 Market Street, USA
201 Flinders Lane, Canada
14 Wellington Road, USA
80 Victoria Street,
5 Johnson St, France
8 Smith Street, UK

As you can see, the full_address and country values are separated by a comma and a space.

Example 8

This example shows many nested CONCAT functions.

1SELECT
2CONCAT(CONCAT(CONCAT(CONCAT(first_name, ' '), last_name), ' - '), full_address) AS NEW_CONCAT
3FROM customers;

Result:

NEW_CONCAT
John Smith - 10 Long Road
Sally Jones - 50 Market Street
Steve Brown - 201 Flinders Lane
Adam Cooper - 14 Wellington Road
Josh Thompson - 80 Victoria Street
Peter Manson - 5 Johnson St
Mark Allan - 8 Smith Street

The name is joined together, and then a hyphen, then the full address.

Example 9

The same query from Example 8 is done but using pipes instead of the CONCAT function.

1SELECT
2first_name || ' ' || last_name || ' - ' || full_address AS NEW_CONCAT
3FROM customers;

Result:

NEW_CONCAT
John Smith - 10 Long Road
Sally Jones - 50 Market Street
Steve Brown - 201 Flinders Lane
Adam Cooper - 14 Wellington Road
Josh Thompson - 80 Victoria Street
Peter Manson - 5 Johnson St
Mark Allan - 8 Smith Street

As you can see, the same result is shown. The first name, last name, and full address are joined together in a much more readable way.

Similar Functions

Some functions which are similar to the CONCAT function are:

  • LISTAGG - allows you to order data within a group and concatenate data

You can find a full list of Oracle functions here.

comments powered by Disqus