2009-06-01 17 views
6

我在「Street_Address_1」欄下面的數據來更新域我的地址表中的「Street_Name」列?換句話說,「Street_Name」是空白的,我想用「Street_Address_1」列中包含的街道名稱填充它。PostgreSQL的查詢使用正則表達式

從我可以告訴,我想用「regexp_matches」字符串的方法。不幸的是,我沒有多少運氣。

注意:您可以假設所有的地址是在「StreetNumber StreetName StreetType」格式。

回答

11

喜歡的東西...:

UPDATE table 
SET Street_Name = substring(Street_Address_1 FROM '^[0-9]+ ([a-zAZ]+) ') 

relevant section from PGSQL 8.3.7 docs,在substring形式的節開始後不久詳述。

+0

沒有運氣與正則表達式。在這種情況下,我更喜歡使用正則表達式,而不是查詢。 – Huuuze 2009-06-01 20:33:37

12

如果你只是想借此Street_Address_1並去掉任何領先的數字,你可以這樣做:

UPDATE table 
SET street_name = regexp_replace(street_address_1, '^[0-9]* ','',''); 

這需要在street_address_1價值和替代號碼與任何領先的字符串(加上一個空格)一個空字符串(第四個參數用於可選正則表達式標誌,如「g」(全局)和「i」(不區分大小寫))。

該版本允許「1212 15th Street」等功能正常工作。