#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, и это сработало отлично 🙂