在过去完成像这样的清理工作之后,您肯定希望分块执行某些操作,特别是直接从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