2

データベース内の住所から都市名を分離したい。

アドレスはさまざまな形式です。

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
4

1 に答える 1

2

これらのアドレス文字列の都市について何を知っていますか?Cityは文字列の最後にありますが、複数の単語を含めることができます。したがって、このテーブルのみを使用して、住所行から都市名を切り取る方法を形式化する方法はないと思います。

そのための1つの方法は、インターネットでお住まいの地域/国のユニバーサル都市テーブルをたとえば任意の形式(ZIPコード、政府統計など)で見つけ、このテーブルを使用してこのテーブルから都市を切り出すことだと思います。アドレス行。

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)

MSSQLServerの場合

SELECT LEFT(Address,LEN(Address)-LEN(Cities.Name)), Cities.Name
from All_Students left join Cities 
     on All_Students.Address like '% '+Cities.Name

コメントで必要に応じてMSSQLで更新するには、次を使用します。

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
于 2012-12-11T12:56:26.910 に答える