Отдельное название города от адреса 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
Другие вопросы по тегам