2011-07-14 28 views
1

我有一個帶有地址的MySQL表,有些郵政編碼有5位數的郵政編碼,有些郵政編碼有9位數字。一個樣本記錄會是這樣的MySQL幫助REGEXP試圖縮短9到5位數的郵政編碼

940 Huguenot Ave Staten Island, NY 10312-4313 

我需要標準化數據庫,並使所有記錄5位數的郵政編碼。我的sudo代碼是這樣的

If regex [0](5 numeric digits)-[1](4 numeric digits) then update table replace('-[1]',''); 

任何幫助,將不勝感激! 謝謝,

UPDATE --- 郵政編碼不是一個獨立的字段,它是地址列的一部分,(一個樣品是上文)

成功! 我最終使用REGEX和SUBSTR的組合使用字段-5的長度。多謝你們!

+0

你不能只取前五字符? –

回答

1

MySQL不支持正則表達式替換操作。但是,您可以先找到包含9位郵政編碼的記錄:

SELECT * FROM mytable WHERE ZIPcode REGEXP "[[:digit:]]{5}-[[:digit:]]{4}"; 

然後刪除破折號後面的五個字符。

+0

如果郵政編碼已經是我的地址的一部分,我該怎麼辦? (喜歡在我原來的帖子) – Andre

+0

這工作在我的地址字段,我想我會寫一個腳本來爲我現在修復它!謝謝 – Andre

0

我從來沒有在MySQL中使用過正則表達式,但它看起來像一個簡單的正則表達式只是檢查' - '字符並刪除字符串中的所有內容,而不是檢查正確的數字位數。抱歉,我無法幫助您編寫代碼,但希望它能讓您走上正軌。

2

MySQL正則表達式只能查找/匹配文本,它們不能修改表中的數據。當然,沒有什麼說你不能通過正則表達式來搜索郵編,但是然後在腳本中進行處理。

SELECT ... 
FROM ... 
WHERE (zipcode REGEX '[[:digit:]]{5}-[[:digit:]]{4}') 
+0

如果郵政編碼已經是我的地址的一部分,我該怎麼辦? (像在我原來的帖子) – Andre

+0

該查詢將返回正則表達式匹配的任何行,所以只需在地址字段上執行正則表達式。我只把'zipcode'作爲字段,因爲我們誰都不知道你的表的結構是什麼 –

+0

我試過這個SELECT * FROM'institutions' WHERE('Address REGEX'[[:digit:]] {5} - [[:digit:]] {4}'),它給了我一個錯誤 – Andre

2

林不知道爲什麼要使用正則表達式,但我只是做:

update table set zip = substring(zip,1,5); 

我想這和它的工作精美

+0

如果郵政編碼是我的地址的一部分而不是郵政編碼列,我該怎麼辦? (就像我原來的帖子) – Andre

+0

我沒有意識到它是列的一部分。我道歉! – jworrin