2014-11-18 4 views
0

У меня есть столбец для адресной улицы (например, 321 North Laredo Road). Этот столбец содержит 10 000 записей. Некоторые записи полностью аббревиатурные, некоторые из них частично, а некоторые - полностью. Точка не была согласованностью (это было так, прежде чем я получил доступ). Мне нужно сделать указатели всех адресов (N, S, E, W) и названия улиц (дорога, blvd, ave и т. Д.) В сокращенные формы и добавить ко второй колонке. любые предложения с методологией или, возможно, уже написанное решение. получая смешанные результаты со следующим тестовым кодом. , ,String Replace - аббревиатуры адресов

/* First find/update directionals */ 
UPDATE hospital 
set tiger_address = replace(street, 'North', 'N') 
where street LIKE "%North%" 
; 
UPDATE hospital 
set tiger_address = replace(street, 'South', 'S') 
where street LIKE "%South%" 
; 
UPDATE hospital 
set tiger_address = replace(street, 'East', 'E') 
where street LIKE "%East%" 
; 
UPDATE hospital 
set tiger_address = replace(street, 'West', 'W') 
where street LIKE "%West%" 
; 
/* Second look for streets to abbreviate */  
UPDATE hospital 
set tiger_address = replace(tiger_address, 'Alley', 'Aly') 
where tiger_address LIKE "%Alley%" 
; 
UPDATE hospital 
set tiger_address = replace(tiger_address, 'Anex', 'Anx') 
where tiger_address LIKE "%Anex%" 
; 
UPDATE hospital 
set tiger_address = replace(tiger_address, 'Arcade', 'Arc') 
where tiger_address LIKE "%Arcade%" 
; 
UPDATE hospital 
set tiger_address = replace(tiger_address, 'Avenue', 'Ave') 
where tiger_address LIKE "%Avenue%" 
; 
UPDATE hospital 
set tiger_address = replace(tiger_address, 'Bayou', 'Byu') 
where tiger_address LIKE "%Bayou%" 
; 
UPDATE hospital 
set tiger_address = replace(tiger_address, 'Beach', 'Bch') 
where tiger_address LIKE "%Beach%" 
; 
UPDATE hospital 
set tiger_address = replace(tiger_address, 'Bend', 'Bnd') 
where tiger_address LIKE "%Bend%" 
; 
UPDATE hospital 
set tiger_address = replace(tiger_address, 'Bluff', 'Blf') 
where tiger_address LIKE "%Bluff%" 
; 
UPDATE hospital 
set tiger_address = replace(tiger_address, 'Bluff', 'Blfs') 
where tiger_address LIKE "%Bluffs%" 
; 
UPDATE hospital 
set tiger_address = replace(tiger_address, 'Street', 'St') 
where tiger_address LIKE "%street%" 
; 

UPDATE hospital 
set tiger_address = replace(street, 'Road', 'Rd') 
where tiger_address LIKE "%road%" 
; 
UPDATE hospital 
set tiger_address = replace(tiger_address, 'Drive', 'Dr') 
where tiger_address LIKE "drive%" 
; 
UPDATE hospital 
set tiger_address = replace(tiger_address, 'Boulevard', 'Blvd') 
where tiger_address LIKE "boulevard%" 
; 

Возраст должен быть лучшим способом. Thank You

ответ

0

Удаление одного фрагмента слова может быть выполнено с использованием MariaDB's regexp_replace и positive look-ahead and look-behind assertions. Для Байу и Бульвара я использую replace.

select replace(replace(
    regexp_replace(
    'North East South West Alley Anex Arcade Avenue ' 
    'Bayou Beach Bend Bluff Bluffs Street Road Drive Boulevard', 

    '(?<=N)orth|(?<=S)outh|(?<=E)ast|(?<=W)est|(?<=Al)le(?=y)|' 
    '(?<=An)e(?=x)|(?<=Arc)ade|(?<=Ave)nue|(?<=B)ea(?=ch)|(?<=B)e(?=nd)|' 
    '(?<=Bl)uf(?=f)|(?<=St)reet|(?<=R)oa(?=d)|(?<=Dr)ive', 

    ''), 
    'Bayou', 'Byu'), 
    'Boulevard', 'Blvd')