# Функция CONCAT_WS

Функция `CONCAT_WS` предназначена для сложения строк при выборке из базы данных с использованием разделителя. Строками обычно выступают поля таблиц.

## Синтаксис

`SELECT CONCAT_WS(разделитель, поле1, поле2...) FROM имя_таблицы WHERE условие`

## Таблицы для примеров

таблица employees
id айди | name имя | age возраст | salary зарплата
--- | --- | --- | ---
1 | user1 | 23 | 300
2 | user2 | 24 | 400
3 | user3 | 25 | 500

## Пример

В данном примере при выборке из базы создается новое поле `concat_ws`, в котором одновременно сольются через дефис `3` поля - age, name и salary:

`SELECT *, CONCAT_WS('-', age, name, salary) as concat_ws FROM employees`

Результат выполнения кода:

id айди | name имя | age возраст | salary зарплата | concat_ws объединенное поле
--- | --- | --- | --- | ---
1 | user1 | 23 | 300 | 23-user1-300
2 | user2 | 24 | 400 | 24-user2-400
3 | user3 | 25 | 500 | 25-user3-500

## Пример

А теперь кроме полей из базы добавится еще и строка `'!!!'`:

`SELECT *, CONCAT_WS('-', age, '!!!', salary) as concat_ws FROM employees`

Результат выполнения кода:

id айди | name имя | age возраст | salary зарплата | concat_ws объединенное поле
--- | --- | --- | --- | ---
1 | user1 | 23 | 300 | 23-!!!-300
2 | user2 | 24 | 400 | 24-!!!-400
3 | user3 | 25 | 500 | 25-!!!-500

## Меняем таблицу для примеров

таблица employees
id айди | name имя | age возраст | salary зарплата | separator разделитель
--- | --- | --- | --- | ---
1 | user1 | 23 | 300 | -
2 | user2 | 24 | 400 | @
3 | user3 | 25 | 500 | !

## Пример

Разделителем может быть не только строка, но и поле таблицы. Давайте сделаем содержимое поля separator разделителем между age, name, salary:

`SELECT *, CONCAT_WS(separator, age, name, salary) as concat_ws FROM employees`

Результат выполнения кода:

id айди | name имя | age возраст | salary зарплата | separator разделитель | concat_ws объединенное поле
--- | --- | --- | --- | --- | ---
1 | user1 | 23 | 300 | - | 23-user1-300
2 | user2 | 24 | 400 | @ | 24@user2@400
3 | user3 | 25 | 500 | ! | 25!user3!500

## Смотрите также

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

↑