SQL объединить строку в новый столбец

#sql #string

#sql #строка

Вопрос:

У меня есть таблица с именем Addresses .

Столбцы являются:

 Property | Road | Town | Borough | District | Postcode
  

Данных Property пока нет, так как я обновлю их вручную позже. Однако остальные столбцы содержат данные.

Однако мне нужно объединить Road, Town, Borough, District и Postcode в новый столбец с именем Full Address .

Так, например

 Property |    Road     |     Town     |  Borough  |  District  | Postcode | Full Address
  NULL     London Road      London       Enfield      North      EN16 5FD   NULL, London Road, London, Enfield, North, EN16 5FD
  

Если вы видите, что столбец «Полный адрес» взял все из той же строки и добавил его в саму строку.

Как я смогу сделать это в SQL?

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

1. Пожалуйста, пометьте свой вопрос базой данных, которую вы используете: mysql, oracle, sqlserver …?

2. Не сохраняйте значения, вычисленные из другого столбца. Вместо этого создайте представление. (Или иметь вычисляемый столбец.)

Ответ №1:

Требуется конкатенация строк. Многие базы данных поддерживают concat_ws() :

 update mytable
set full_address = concat_ws(', ', 
    property,
    road,
    town,
    borough,
    district,
    postcode
);
  

Поведение concat_ws() в отношении null значений варьируется в зависимости от базы данных. Некоторые из них вернут null значение, если какое-либо значение в списке равно null ; в этом случае вы можете захотеть окружить null доступные столбцы в списке coalesce() , например coalesce(property, '') .

Если ваша база данных не поддерживает group_concat() , используйте обычный оператор конкатенации строк; в стандартном SQL это || :

     property    || ', '
    || road     || ', '
    || town     || ', '
    || borough  || ', '
    || district || ', '
    || postcode
  

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

 create view myview as
select t.*,
    concat_ws(', ', 
        property,
        road,
        town,
        borough,
        district,
        postcode
    ) as full_address
from mytable t
  

Ответ №2:

GMB уже ответил на вопрос с помощью concat_ws() функции, но вы также можете сделать это с помощью CONCAT() функции, как показано ниже.

 SELECT 
        Road, 
        Town, 
        Borough, 
        District,
        CONCAT(Road,' ', Town,' ', Borough,' ', District) as Full_Address
    FROM mytable
  

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

1. Отлично! Я смешал ваш и GMB коды вместе, так как не мог использовать concat_ws, и это сработало отлично 🙂