在過去完成像這樣的清理工作之後,您肯定希望分塊執行某些操作,特別是直接從SQL執行操作,例如通過SQL查詢界面。
我會先修改您的表格結構並添加您需要的額外列 - 另外添加到「workingAddress」的EXTRA列(或在您的查詢中縮寫爲「wadr」)。
然後,所有的地址列值複製到臨時工作地址欄,所以我們不破壞原來的一個...
update yourTable set wadr = Address;
然後,工作一種成分的時間和這樣做...
update yourTable
set [Address Number] = LTRIM(RTRIM(LEFT(wadr, CHARINDEX(',', wadr) -1)))
where CHARINDEX(',', wadr) > 1;
然後,只保留那些地址數的只是數字表示
update yourTable
set [Address Number] = ''
where LTRIM(RTRIM(STR(cast([Address Number] as Integer), 6))) = RTRIM([Address Number]);
現在210
,對於那些都成功控制,
update yourTable
set wadr = LTRIM(RTRIM(SUBSTR(wadr, CHARINDEX(',', wadr) +1, 60)))
where LEN(RTRIM([Address Number])) > 0;
所以現在從工作地址欄去掉,你的地址號碼(如果存在)會在你的[地址編號]列,這個數字已被剝奪從「WADR」欄,並修剪成僅一街之...現在,過程街道:
update yourTable
set [Street] = LTRIM(RTRIM(LEFT(wadr, CHARINDEX(',', wadr) -1)))
where CHARINDEX(',', wadr) > 1;
而且從工作地址欄剝離街道
update yourTable
set wadr = LTRIM(RTRIM(SUBSTR(wadr, CHARINDEX(',', wadr) +1, 60)))
where LEN(RTRIM([Street])) > 0;
現在到城市,然後剝離市地方發現...
update yourTable
set [City] = LTRIM(RTRIM(LEFT(wadr, CHARINDEX(',', wadr) -1)))
where CHARINDEX(',', wadr) > 1;
而且從工作地址欄
update yourTable
set wadr = LTRIM(RTRIM(SUBSTR(wadr, CHARINDEX(',', wadr) +1, 60)))
where LEN(RTRIM([City])) > 0;
最後你的郵政編碼......這可能剝離街道是2個條件...如果沒有逗號,只需抓住可能留下的任何東西......您的一些示例數據沒有郵政編碼。這將首先從wadr獲取郵政編碼,然後清除wadr列,如果沒有更多的逗號。
update yourTable
set [Postcode] = wadr,
wadr = ''
where CHARINDEX(',', wadr) < 1;
現在,對於那些有一個郵政編碼和其他的東西(你的垃圾末),只要抓住之前的逗號像早期的情況下
update yourTable
set [Postcode] = LTRIM(RTRIM(LEFT(wadr, CHARINDEX(',', wadr) -1)))
where CHARINDEX(',', wadr) > 1;
update yourTable
set wadr = LTRIM(RTRIM(SUBSTR(wadr, CHARINDEX(',', wadr) +1, 60)))
where LEN(RTRIM([Postcode])) > 0;
在年底無論是,你的「wadr」列應該是空白的,或者只是最後的垃圾內容。語法可能需要調整一些,但應該做的伎倆......一旦這些都很好去,確認事情看起來不錯,你可以刪除「wadr」列,如果你想,最終殺死「地址」柱。
我會用像C#而不是SQL的其他工具清理它。但即使如此,還不清楚是否有可能。這真是一團糟。似乎沒有任何規則。 –
我總是喜歡在修復過去之前修復未來。在這種情況下,請採取措施確保新記錄具有所需的格式。事實上,我會去分開的領域。此外,您所需的格式不考慮公寓號碼。 –
這看起來像一個正則表達式的工作。 – eebbesen