sql - 将城市名称与地址分开sql查询

标签 sql sql-server street-address

我想将城市名称与数据库中的地址分开。

地址的格式不同 例如

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/

相关文章:

sql-server - 是否可以将文件组从一个数据库复制到另一个数据库?

电话号码和地址的mysql数据类型

street-address - 如何将街道地址与英国邮政编码匹配?

ruby-on-rails - 自动完成 Ajax - 获取各州城市的完整列表?

sql - SELECT 语句中列的顺序是否有所不同?

sql - 如何在 x 次后增加一行

sql-server - 从 Ubuntu 连接 SQL Server 时 sqlcmd 登录失败

sql - 通过SUM与Group By进行SQL查询

sql - 将字段值从 1,000 转换为数字

mysql - 如何在 Mysql 中更新或更改自动递增列值