我想将城市名称与数据库中的地址分开。
地址的格式不同 例如
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
最佳答案
我们对这些地址字符串中的城市了解多少? City 位于字符串的末尾,但它可以包含超过 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
关于sql - 将城市名称与地址分开sql查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13819973/