2013-11-26 200 views
0

您是否可以將郵編轉換爲MySQL中的Z + 4?我遇到了一些問題,我有一些郵編有多種數字。將郵政編碼轉換爲郵政編碼+4 MySQL

例如,我們發貨到波多黎各,郵政編碼以兩個零開頭:00XXX
這會給我一個沒有前導零的三個數字「XXX」的文本。

對於緬因州等州來說,郵政編碼從一個零開始:0XXXX
這會給我四個數字「XXXX」。

對於美國的大多數州來說,我會得到一個標準的5個字符的郵政編碼,這很好。但是,如果客戶也輸入了他們的Z + 4呢?我會有9個字符。

什麼讓它更加複雜的是,當美國東北部的客戶給Z + 4。 (0XXXX-XXXX)

所以我會定期爲我的郵編區域提供以下類型。

Puerto Rico(XXX);
美國東北部(XXXX);
Regular Zip(XXXXX);
Northeast US + 4(XXXXXXXX);
Regular Zip + 4(XXXXXXXXX)

我無法弄清楚如何將它們轉換。我知道它應該是什麼數據類型。任何的意見都將會有幫助。

另外,如果我想要在郵編+4的「 - 」怎麼辦?這樣它會是XXXXX-XXXX或0XXXX-XXXX?

目前我正在使用varchar(10),但是當我導入它時,無論如何都會從我的文本文件中取消前導零。在這種情況下,我必須將Zip轉換爲XXXXX-XXXX或0XXXX-XXXX的格式,然後將其上傳。只是想使這個自動化,而不必擔心錯過一個郵編,並在運輸過程中出現錯誤。

+0

這是一次性的事情還是你想插入/更新? – aust

+3

你應該使用'Char(9)'或'VARCHAR(9)'。郵政編碼不是數字,使用一個數據類型將刪除前面的零('0')。由於緬因州有效的郵政編碼是以「0」開始的5個字符,因此數字類型永遠不會允許您存儲它;一個字符類型的列將保持前面的「0」。 –

+0

我們不斷得到訂單,每天幾千個。我已經通過我制定的Excel公式轉換了它們,但我在Excel中遇到了8個字符拉鍊(如東北美國+4)的問題。我想要一個更自動化的方式來避免任何錯誤。 – Nelson

回答

0

這將適用於美國郵政編碼。

SELECT 
CASE WHEN `PostalCode` < 999 THEN CONCAT('00', `PostalCode`, '-0000') 
WHEN `PostalCode` < 9999 THEN CONCAT('0', `PostalCode`, '-0000') 
WHEN `PostalCode` < 99999 THEN CONCAT(`PostalCode`, '-0000') 
WHEN `PostalCode` < 99999999 THEN CONCAT('0',LEFT(`PostalCode`, 4),'-',RIGHT(`PostalCode`, 4)) 
ELSE CONCAT(LEFT(`PostalCode`,5),'-',RIGHT(`PostalCode`, 4)) END as PostalCodeConversion 
FROM YourTable; 

希望這可以幫助任何人需要一個答案。