Отдельное название города от адреса sql запроса
Я хочу отделить название города от адресов в базе данных.
адреса в разных форматах, например
835 street no.3 Jalabad D.I. Khan ................ here city name is D.I khan
Ho. No. 102 St. No. 85 RawalPindi ..........here city name is RawalPindi
h no.944 St. No.74 Karkhana road Gujrat ......here city name is Gujrat
Ho. no.241 S No.26 I-8/3 Isb .........here city name is isb
Я делаю это, но это работает только для немногих... Мне нужен общий запрос, который может работать для любого формата адреса
SELECT DISTINCT REVERSE
(
LEFT( REVERSE(All_Students.Address), CHARINDEX(' ', REVERSE(All_Students.Address))-1 )
) as Addresses
from All_Students
order by addresses
1 ответ
Что мы знаем о городах в этих адресных строках? Город находится в конце строки, но может содержать более 1 слова. Поэтому я думаю, что нет способа формализовать метод вырезания названия города из строки адреса, используя только эту таблицу.
Я думаю, что единственный способ сделать это - найти универсальную таблицу городов для вашего региона / страны в Интернете, например, в любом формате (почтовые индексы, правительственная статистика,...) и использовать эту таблицу, чтобы вырезать города из этой таблицы из Адресная строка.
Для MySQL
SELECT TRIM(TRIM(TRAILING Cities.Name FROM Address) ), Cities.Name
from All_Students left join Cities
on All_Students.Address like CONCAT('% ',Cities.Name)
Для MS SQL Server
SELECT LEFT(Address,LEN(Address)-LEN(Cities.Name)), Cities.Name
from All_Students left join Cities
on All_Students.Address like '% '+Cities.Name
Для обновления в MS SQL, как требуется в комментарии, используйте это:
UPDATE
A
SET
A.address = B.NewAddress,
A.City = B.City
FROM
Transformed_All_Student A
JOIN
(
SELECT Student_id,
LEFT(Address,LEN(Address)-LEN(Cities.Name)) as NewAddress,
Cities.Name as City
from All_Students left join Cities
on All_Students.Address like '% '+Cities.Name
) B
ON A.Student_ID = B.Student_id