SSIS拆分字符串地址

时间:2012-07-23 07:54:52

标签: string ssis split

我有一个由地址组成的列,如下所示。

地址

  • 1 Reid Street,Manchester,M1 2DF
  • 12 Borough Road,London,E12,2FH
  • 15 Jones Street,Newcastle,Tyne&磨损,NE1 3DN
等等......等等。

我想将其拆分为不同的列以导入我的SQL数据库。我一直在尝试使用Findstring以逗号分隔,但是当某些地址比其他地址有更多“部分”时遇到麻烦。任何想法是什么最好的方式来解决这个问题?

很多谢谢

2 个答案:

答案 0 :(得分:1)

这是需求规范问题,而不是实现问题。您可以承担的地址格式越多,您就可以进行更详细的解析;同一枚硬币的另一面是你对地址结构的假设越少,你就会被指责的错误解析就越少。

确定您是否只需要处理英国邮政电子邮件,或者是否可能出现全球地址至关重要。

根据您的示例,地址的某些部分似乎始终存在,但请检查this resource以确定它们是否真的需要在所有英国电子邮件地址中使用。

如果在所需的解析深度和可以安全的假设之间找到匹配,则应该能够通过逗号索引(FINDSTRING)继续解析;从左边开始确定一些组件,从字符串右边开始一些组件;把所有剩下的东西都当作一个未被解剖的身体。

您可能还会发现,您当前的任务是不可能执行的任务,尤其是与国际邮政地址相关的任务。这就是为什么大多数网站和其他数据收集者都要求用户以已解析的形式输入邮政地址。

答案 1 :(得分:1)

Hanika提出的优秀观点。您的一些解析将取决于目标目标的样子。作为一个无知的猛拉,基于Hanika的链接,我认为你的输出看起来像

  • 收件人
  • 组织
  • BuildingName
  • BuildingAddress
  • 局部性
  • PostTown
  • 邮编
  • BasicsMet(布尔值,指示是否已满足良好地址的最低标准。)
    • 在美国,仅仅是因为地址不能正确地CASS并不意味着它无法交付 - cip,我的祖父母住在足够的小镇,指明他们的名字和当地的邮政官员知道他们是谁,这个城市就足够了。但是对于批量邮件,他们的地址不符合批量邮寄费率,并且默认为一流邮件。我假设英国邮件存在类似的情况

一般的想法是每行流经,你会想尽力将数据解析到那些桶中。使其“正确”的最佳解决方案是更改数据输入方法以验证并将数据捕获到这些离散桶中。由于最佳状态永远不会发生,因此您需要对浮渣进行分类以找到您的黄金。

虽然你可以用FINDSTRING写一些奇妙的表达,但在这种情况下我会反对它,因为单独的维护会让你发疯。相反,添加脚本转换并在.NET中构建解析逻辑(vb或c#)。然后会有一个循环,通过您的转换运行数据,并让某人关注结果。如果您找到新方案,则返回并调整业务规则。这很难看,它是迭代的,它很容易产生人类不会拥有的结果。

滚动地址标准化逻辑的替代方法

  • 买它。最终,您的业务需求超出了应对不断变化的业务规则的能力。那里有很多供应商,但我只熟悉美国的供应商
  • 升级到SQL Server 2012以使用DQS(数据质量服务)。您可能仍然需要购买产品来构建您的知识库,但您可以将业务规则制定任务卸载给域专家(“嘿,你花一小时制作花生。确保所有地址都来自这个外观喜欢地址“就是他们在我的一个工作开始时如何涵盖这一点。”