Oracle / plsql: concat function

CONCAT() function

MySQL CONCAT() function is used to add two or more strings.

  • There may be one or more arguments.
  • Returns the string that results from concatenating the arguments.
  • Returns a nonbinary string, if all arguments are nonbinary strings.
  • Returns a binary string, if the arguments include any binary strings.
  • If the argument is numeric, it is converted to its equivalent nonbinary string form.
  • Returns NULL if any argument is NULL.

Syntax:

CONCAT (string1, string2,…)

Arguments

Name Description
string1 First string to be joined.
string2 Second string to be joined. Up to N number of strings can be specified this way.

Syntax Diagram:

MySQL Version: 5.6

Pictorial representation of MySQL CONCAT() function

Video Presentation

Your browser does not support HTML5 video.

SQL References

SQL Keywords
ADD
ADD CONSTRAINT
ALTER
ALTER COLUMN
ALTER TABLE
ALL
AND
ANY
AS
ASC
BACKUP DATABASE
BETWEEN
CASE
CHECK
COLUMN
CONSTRAINT
CREATE
CREATE DATABASE
CREATE INDEX
CREATE OR REPLACE VIEW
CREATE TABLE
CREATE PROCEDURE
CREATE UNIQUE INDEX
CREATE VIEW
DATABASE
DEFAULT
DELETE
DESC
DISTINCT
DROP
DROP COLUMN
DROP CONSTRAINT
DROP DATABASE
DROP DEFAULT
DROP INDEX
DROP TABLE
DROP VIEW
EXEC
EXISTS
FOREIGN KEY
FROM
FULL OUTER JOIN
GROUP BY
HAVING
IN
INDEX
INNER JOIN
INSERT INTO
INSERT INTO SELECT
IS NULL
IS NOT NULL
JOIN
LEFT JOIN
LIKE
LIMIT
NOT
NOT NULL
OR
ORDER BY
OUTER JOIN
PRIMARY KEY
PROCEDURE
RIGHT JOIN
ROWNUM
SELECT
SELECT DISTINCT
SELECT INTO
SELECT TOP
SET
TABLE
TOP
TRUNCATE TABLE
UNION
UNION ALL
UNIQUE
UPDATE
VALUES
VIEW
WHERE

MySQL Functions
String Functions
ASCII
CHAR_LENGTH
CHARACTER_LENGTH
CONCAT
CONCAT_WS
FIELD
FIND_IN_SET
FORMAT
INSERT
INSTR
LCASE
LEFT
LENGTH
LOCATE
LOWER
LPAD
LTRIM
MID
POSITION
REPEAT
REPLACE
REVERSE
RIGHT
RPAD
RTRIM
SPACE
STRCMP
SUBSTR
SUBSTRING
SUBSTRING_INDEX
TRIM
UCASE
UPPER

Numeric Functions
ABS
ACOS
ASIN
ATAN
ATAN2
AVG
CEIL
CEILING
COS
COT
COUNT
DEGREES
DIV
EXP
FLOOR
GREATEST
LEAST
LN
LOG
LOG10
LOG2
MAX
MIN
MOD
PI
POW
POWER
RADIANS
RAND
ROUND
SIGN
SIN
SQRT
SUM
TAN
TRUNCATE

Date Functions
ADDDATE
ADDTIME
CURDATE
CURRENT_DATE
CURRENT_TIME
CURRENT_TIMESTAMP
CURTIME
DATE
DATEDIFF
DATE_ADD
DATE_FORMAT
DATE_SUB
DAY
DAYNAME
DAYOFMONTH
DAYOFWEEK
DAYOFYEAR
EXTRACT
FROM_DAYS
HOUR
LAST_DAY
LOCALTIME
LOCALTIMESTAMP
MAKEDATE
MAKETIME
MICROSECOND
MINUTE
MONTH
MONTHNAME
NOW
PERIOD_ADD
PERIOD_DIFF
QUARTER
SECOND
SEC_TO_TIME
STR_TO_DATE
SUBDATE
SUBTIME
SYSDATE
TIME
TIME_FORMAT
TIME_TO_SEC
TIMEDIFF
TIMESTAMP
TO_DAYS
WEEK
WEEKDAY
WEEKOFYEAR
YEAR
YEARWEEK

Advanced Functions
BIN
BINARY
CASE
CAST
COALESCE
CONNECTION_ID
CONV
CONVERT
CURRENT_USER
DATABASE
IF
IFNULL
ISNULL
LAST_INSERT_ID
NULLIF
SESSION_USER
SYSTEM_USER
USER
VERSION

SQL Server Functions
String Functions
ASCII
CHAR
CHARINDEX
CONCAT
Concat with +
CONCAT_WS
DATALENGTH
DIFFERENCE
FORMAT
LEFT
LEN
LOWER
LTRIM
NCHAR
PATINDEX
QUOTENAME
REPLACE
REPLICATE
REVERSE
RIGHT
RTRIM
SOUNDEX
SPACE
STR
STUFF
SUBSTRING
TRANSLATE
TRIM
UNICODE
UPPER

Numeric Functions
ABS
ACOS
ASIN
ATAN
ATN2
AVG
CEILING
COUNT
COS
COT
DEGREES
EXP
FLOOR
LOG
LOG10
MAX
MIN
PI
POWER
RADIANS
RAND
ROUND
SIGN
SIN
SQRT
SQUARE
SUM
TAN

Date Functions
CURRENT_TIMESTAMP
DATEADD
DATEDIFF
DATEFROMPARTS
DATENAME
DATEPART
DAY
GETDATE
GETUTCDATE
ISDATE
MONTH
SYSDATETIME
YEAR

Advanced Functions
CAST
COALESCE
CONVERT
CURRENT_USER
IIF
ISNULL
ISNUMERIC
NULLIF
SESSION_USER
SESSIONPROPERTY
SYSTEM_USER
USER_NAME

MS Access Functions
String Functions
Asc
Chr
Concat with &
CurDir
Format
InStr
InstrRev
LCase
Left
Len
LTrim
Mid
Replace
Right
RTrim
Space
Split
Str
StrComp
StrConv
StrReverse
Trim
UCase

Numeric Functions
Abs
Atn
Avg
Cos
Count
Exp
Fix
Format
Int
Max
Min
Randomize
Rnd
Round
Sgn
Sqr
Sum
Val

Date Functions
Date
DateAdd
DateDiff
DatePart
DateSerial
DateValue
Day
Format
Hour
Minute
Month
MonthName
Now
Second
Time
TimeSerial
TimeValue
Weekday
WeekdayName
Year

Other Functions
CurrentUser
Environ
IsDate
IsNull
IsNumeric

SQL OperatorsSQL Data TypesSQL Quick Ref

Example of MySQL CONCAT() function on columns

The following MySQL statement will add values of pub_city column with values of the country column of publisher table placing a ‘—>’ between them.

Code:

Sample table: publisher

Sample Output:

mysql> SELECT CONCAT(pub_city,'--> ',country)
    -> FROM publisher;
+---------------------------------+
| CONCAT(pub_city,'--> ',country) |
+---------------------------------+
| New York--> USA                 | 
| Mumbai--> India                 | 
| Adelaide--> Australia           | 
| London--> UK                    | 
| Houstan--> USA                  | 
| New York--> USA                 | 
| Cambridge--> UK                 | 
| New Delhi--> India              | 
+---------------------------------+
8 rows in set (0.00 sec)

Определение длины строки в sql запросах

Для определения количества символов в строке в языке SQL отвечает функция LENGTH — длина строки:

integer LENGTH(str string)

Функция возвращает целое число равное количеству символов в строке str.

Пример:

SELECT LENGTH (‘test’);
Результат: 4

В случае использования многобайтовых кодировок функция LENGTH выдает не правильный результат. Например в случае если задана кодировка unicode, то запрос:

SELECT LENGTH (‘тест’);

вернет 8. Что, легко заметить, в два раза больше реального количества символов. В этом случае нужно использовать функцию CHAR_LENGTH:

integer CHAR_LENGTH(str string)

Функция также возвращает длину строки str и поддерживает многобайтовые символы.

Например:

SELECT CHAR_LENGTH (‘тест’);
Результат: 4

SQL Plus Operator Overview

Usually, we use a SQL Plus (+) operator to perform SQL Server Concatenate operation with multiple fields together. We can specify space character as well in between these columns.

Examples of SQL Plus(+) Operator

Look at the following query. In this query, we use SQL Plus(+) operator and space between the single quote as a separator between these fields.

1
2
3
4
5
6

SELECTTOP10FirstName,

MiddleName,

LastName,

FirstName+’ ‘+MiddleName+’ ‘+LastNameASFullName

FROMAdventureWorks2017.Person.Person

WHEREMiddlenameISNOTNULL;

In the output of SQL Server Concatenate using SQL Plus (+) operator, we have concatenate data from these fields (firstname, MiddleName and LastName) as a new column FullName.

We have a drawback in SQL Server Concatenate data with SQL Plus(+) operator. Look at the following example.

1
2
3
4
5

SELECTTOP10FirstName,

MiddleName,

LastName,

FirstName+’ ‘+MiddleName+’ ‘+LastNameASFullName

FROMAdventureWorks2017.Person.Person

In this example, we can see that if we have any NULL value present in any fields, we get output of concatenate string as NULL with SQL Plus(+) operator.

We can use SQL ISNULL function with + operator to replace NULL values with a space or any specific value. Execute the following query and we can still use SQL Plus(+) operator to concatenate string for us.

1
2
3
4
5

SELECTTOP10FirstName,

MiddleName,

LastName,

ISNULL(FirstName,»)+’ ‘+ISNULL(MiddleName,»)+’ ‘+ISNULL(LastName,»)ASFullName

FROMAdventureWorks2017.Person.Person;

Let’s look at another example of SQL Server Concatenate values with string as well as numeric values. In the following query, we want to concatenate first, middle, full name along with the NationalID number.

1
2
3
4
5
6
7
8

SELECTp.Title,

p.FirstName,

p.MiddleName,

p.LastName,

p.FirstName+’ ‘+p.MiddleName+’ ‘+p.LastName+’NationalIDNumber is :’+e.NationalIDNumberASEmpDetail

FROMHumanResources.Employeee

INNERJOINPerson.PersonpONp.BusinessEntityID=e.BusinessEntityID

WHEREp.MiddlenameISNOTNULL;

Suppose we want the single quote as well in the SQL Server Concatenate. In SQL Server, once we combine strings using SQL Plus(+) operator, it concatenates values inside single quotes. In the following query, we can see we specified two single quotes to display a single quote in the output.

1 SELECT’Let»s’+’ explore SQL Server with articles on SQLShack’;

If there is any mismatch or incorrect use of the single quote, you get following error message.

Msg 102, Level 15, State 1, Line 4
Incorrect syntax near ‘ + ‘.
Msg 319, Level 15, State 1, Line 4
Incorrect syntax near the keyword ‘with’. If this statement is a common table expression,
an xmlnamespaces clause or a change tracking context clause, the previous statement must be terminated with a semicolon.
Msg 105, Level 15, State 1, Line 4
Unclosed quotation mark after the character string ‘;
‘.

If we want to print more single quotes, we need to define in the string in the following format with two single quotes.

Expected Output: ‘Let’s explore SQL Server with articles on SQLShack’

We can modify SQL query as follow.

1 SELECT»’Let»s’+’ explore SQL Server with articles on SQLShack»’;

Note: You should not confuse a single quote with the double quotes. SQL Server treats double quotes as a character.

In the following query, we used a double quote in a combination of a single quote.

1 SELECT'»»Let»s’+’ explore SQL Server with articles on SQLShack»’;

We can do SQL Server Concatenate operation using the SQL Plus(+) operator; however, it becomes complex if you need to use multiple single quotes. It is difficult to debug code as well since you need to look at all the single quotes combinations as well.

Конкатенация символа пробел

Когда вы объединяете значения вместе, вы можете добавить пробелы для разделения объединенных значений. В противном случае вы можете получить длинную строку с объединенными значениями, работающими вместе. Это очень затрудняет чтение результатов.

Давайте посмотрим на простой пример.

Мы можем объединить символ пробела, используя || оператор.

Например:

PgSQL

SELECT ‘Olga’ || ‘ ‘ || ‘Samvel’;
Результат: ‘Olga Samvel’

1
2

SELECT’Olga’||’ ‘||’Samvel’;
Результат:’Olga Samvel’

В этом примере мы использовали || оператор для добавления пробела между значениями Olga и Samvel. Это предотвратит слияние наших определений.

Вместо этого наш результат будет выглядеть следующим образом:

PgSQL

‘Olga Samvel’

1 ‘Olga Samvel’

Вы бы чаще использовали || оператор для объединения пробела при объединении нескольких полей вместе.

Например:

PgSQL

SELECT first_name || ‘ ‘ || last_name AS contact_name
FROM contacts;

1
2

SELECTfirst_name||’ ‘||last_nameAScontact_name

FROMcontacts;

В этом примере возвращается набор результатов с одним столбцом, который состоит из полей first_name и last_name (разделенных пробелом) из таблицы contacts. Столбец в результирующем наборе будет иметь псевдоним contact_name.

Задание псевдонимов для столбцов запроса

ФИО Дата приема Дата рождения ZP
Иванов Иван Иванович 2015-04-08 1955-02-19 5000
Петров Петр Петрович 2015-04-08 1983-12-03 1500
NULL 2015-04-08 1976-06-07 2500
NULL 2015-04-08 1982-04-17 2000
FullName1 FullName2 FullName3
Иванов Иван Иванович Иванов Иван Иванович Иванов Иван Иванович
Петров Петр Петрович Петров Петр Петрович Петров Петр Петрович
NULL Сидоров Сидор Сидоров Сидор
NULL Андреев Андрей Андреев Андрей

Основные арифметические операторы SQL

Оператор Действие
+ Сложение (x+y) или унарный плюс (+x)
Вычитание (x-y) или унарный минус (-x)
* Умножение (x*y)
Деление (x/y)
% Остаток от деления (x%y). Для примера 15%10 даст 5
ID Name Result1 Result2 Result3
1000 Иванов И.И. 2500 2500 2500
1001 Петров П.П. 225 225 225
1002 Сидоров С.С. NULL
1003 Андреев А.А. 600 600 600
1004 Николаев Н.Н. NULL
1005 Александров А.А. NULL
ID Name
1000 Иванов И.И.
1004 Николаев Н.Н.
1002 Сидоров С.С.

MySQL CONCAT returns NULL if any field contain NULL

The following MySQL statement will add book name and pub_lang column by a ‘—>’ for all the books.

Code:

Sample table: book_mast

Sample Output:

mysql> SELECT CONCAT(book_name,'--> ',pub_lang)
    -> FROM book_mast;
+------------------------------------------------+
| CONCAT(book_name,'--> ',pub_lang)              |
+------------------------------------------------+
| Introduction to Electrodynamics--> English     |
| Understanding of Steel Construction--> English |
| Guide to Networking--> Hindi                   |
| Transfer  of Heat and Mass--> English          |
| NULL                                           |
| Fundamentals of Heat--> German                 |
| Advanced 3d Graphics--> Hindi                  |
| Human Anatomy--> German                        |
| Mental Health Nursing--> English               |
| Fundamentals of Thermodynamics--> English      |
| The Experimental Analysis of Cat--> French     |
| The Nature  of World--> English                |
| Environment a Sustainable Future--> German     |
| NULL                                           |
| Anatomy & Physiology--> Hindi                  |
| Networks and Telecommunications--> French      |
+------------------------------------------------+
16 rows in set (0.01 sec)

The above output shows that, when the value of any of the two columns mention above is NULL, the output returns NULL, mention by red color.

ПримерыExamples

A.A. Использование объединения строкUsing string concatenation

В следующем примере создается единственный столбец с заголовком из нескольких символьных столбцов, где за фамилией лица следуют запятая, один пробел и имя того же лица.The following example creates a single column under the column heading from multiple character columns, with the last name of the person followed by a comma, a single space, and then the first name of the person. Результирующий набор сортируется в алфавитном порядке по возрастанию, сначала по фамилии, а затем по имени.The result set is in ascending, alphabetical order by the last name, and then by the first name.

Б.B. Объединение числовых типов данных и датCombining numeric and date data types

В приведенном ниже примере функция используется для объединения типов данных numeric и date.The following example uses the function to concatenate numeric and date data types.

Результирующий набор:Here is the result set.

В.C. Использование объединения нескольких строкUsing multiple string concatenation

Следующий пример сцепляет несколько строк в одну длинную строку для отображения фамилии и первой буквы инициалов вице-президентов в Компания Adventure Works CyclesAdventure Works Cycles.The following example concatenates multiple strings to form one long string to display the last name and the first initial of the vice presidents at Компания Adventure Works CyclesAdventure Works Cycles. После фамилии ставится запятая, а после первой буквы инициалов — точка.A comma is added after the last name and a period after the first initial.

Результирующий набор:Here is the result set.

Г.D. Использование больших строк при объединенииUsing large strings in concatenation

В приведенном ниже примере выполняется объединение нескольких строк в одну длинную строку, а затем предпринимается попытка вычислить длину итоговой строки.The following example concatenates multiple strings to form one long string and then tries to compute the length of the final string. Итоговая длина результирующего набора равна 16 000, так как вычисление выражения начинается слева, то есть @x + @z + @y => (@x + @z) + @y.The final length of resultset is 16000, because expression evaluation starts from left that is, @x + @z + @y => (@x + @z) + @y. В этом случае результат (@x + @z) усекается до 8000 байт, а затем в результирующий набор добавляется значение @y, из-за чего длина итоговой строки становится равна 16 000.In this case the result of (@x + @z) is truncated at 8000 bytes and then @y is added to the resultset, which makes the final string length 16000. Так как @y — это строка типа с большим значением, усечения не происходит.Since @y is a large value type string, truncation does not occur.

Результирующий набор:Here is the result set.

Вопросы и ответы

Ответ:

Поскольку функция CONCAT позволяют объединить только 2 строки, вы должны использовать вложение несколько функций CONCAT для объединения более 2 строк вместе.

Например, для объединения 3-х строк, вы могли бы вложить функцию CONCAT следующим образом:

CONCAT( CONCAT( string1, string2 ), string3 )

Или вы могли бы вложить функцию CONCAT следующим образом, если вы хотите объединить 4 строки:

CONCAT( CONCAT( CONCAT( string1, string2 ), string3 ), string4 )

Вот пример, который демонстрирует, вложение несколько функций Concat для объединения 6 строк:

Oracle PL/SQL

SQL> select CONCAT( CONCAT( CONCAT( CONCAT( CONCAT(
‘У попа ‘, ‘была собака’), ‘ он ее любил. ‘), ‘Она съела’),’ кусок мяса ‘),
‘он ее убил.’) from dual;
—————————————————————-
У попа была собака он ее любил. Она съела кусок мяса он ее убил.

1
2
3
4
5

SQL>selectCONCAT(CONCAT(CONCAT(CONCAT(CONCAT(

‘У попа ‘,’была собака’),’ он ее любил. ‘),’Она съела’),’ кусок мяса ‘),

‘он ее убил.’)fromdual;
—————————————————————-
Упопабыласобакаонеелюбил.Онасъелакусокмясаонееубил.

Функция CONCAT является одним из методов для объединения строк в Oracle. Альтернативой использованию функции CONCAT нужно использовать оператор | | объединения нескольких строк, а именно:

Oracle PL/SQL

SQL> select ‘У попа ‘ || ‘была собака’ || ‘ он ее любил. ‘ || ‘Она съела’ || ‘ кусок мяса ‘ || ‘он ее убил.’ from dual;
—————————————————————-
У попа была собака он ее любил. Она съела кусок мяса он ее убил.

1
2
3

SQL>select’У попа ‘||’была собака’||’ он ее любил. ‘||’Она съела’||’ кусок мяса ‘||’он ее убил.’fromdual;
—————————————————————-
Упопабыласобакаонеелюбил.Онасъелакусокмясаонееубил.

КомментарииRemarks

При работе с пустыми строками нулевой длины оператор + (объединение строк) ведет себя иначе, чем при работе со значениями NULL или с неизвестными значениями.The + (String Concatenation) operator behaves differently when it works with an empty, zero-length string than when it works with NULL, or unknown values. Символьная строка символа нулевой длины может быть указана в виде двух одинарных кавычек без каких-либо символов между ними.A zero-length character string can be specified as two single quotation marks without any characters inside the quotation marks. Двоичная строка нулевой длины может быть указана как 0x без указания каких-либо байтовых значений в шестнадцатеричной константе.A zero-length binary string can be specified as 0x without any byte values specified in the hexadecimal constant. При сцеплении строки нулевой длины всегда сцепляются две указанные строки.Concatenating a zero-length string always concatenates the two specified strings. При работе со строками со значением NULL результат объединения зависит от настроек сеанса.When you work with strings with a null value, the result of the concatenation depends on the session settings. При присоединении нулевого значения к известному значению результатом будет неизвестное значение, объединение строк с нулевым значением также дает нулевое значение, как и в арифметических действиях с нулевыми значениями.Just like arithmetic operations that are performed on null values, when a null value is added to a known value the result is typically an unknown value, a string concatenation operation that is performed with a null value should also produce a null result. Однако можно изменить данное поведение, поменяв значение для текущего сеанса.However, you can change this behavior by changing the setting of for the current session. Дополнительные сведения см. в разделе SET CONCAT_NULL_YIELDS_NULL (Transact-SQL).For more information, see SET CONCAT_NULL_YIELDS_NULL (Transact-SQL).

Если результат объединения строк превышает предел в 8 000 байт, то он усекается.If the result of the concatenation of strings exceeds the limit of 8,000 bytes, the result is truncated. Однако усечения не произойдет, если хотя бы одна из сцепляемых строк принадлежит к типу больших значений.However, if at least one of the strings concatenated is a large value type, truncation does not occur.

Булевы операторы и простые операторы сравнения

AND логическое И. Ставится между двумя условиями (условие1 AND условие2). Чтобы выражение вернуло True, нужно, чтобы истинными были оба условия
OR логическое ИЛИ. Ставится между двумя условиями (условие1 OR условие2). Чтобы выражение вернуло True, достаточно, чтобы истинным было только одно условие
NOT инвертирует условие/логическое_выражение. Накладывается на другое выражение (NOT логическое_выражение) и возвращает True, если логическое_выражение = False и возвращает False, если логическое_выражение = True
Условие Значение
= Равно
< Меньше
> Больше
<= Меньше или равно
>= Больше или равно
<>
!=
Не равно
IS NULL Проверка на равенство NULL
IS NOT NULL Проверка на неравенство NULL
Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *