我有一个由地址组成的列,如下所示。
地址
我想将其拆分为不同的列以导入我的SQL数据库。我一直在尝试使用Findstring以逗号分隔,但是当某些地址比其他地址有更多“部分”时遇到麻烦。任何想法是什么最好的方式来解决这个问题?
很多谢谢
答案 0 :(得分:1)
这是需求规范问题,而不是实现问题。您可以承担的地址格式越多,您就可以进行更详细的解析;同一枚硬币的另一面是你对地址结构的假设越少,你就会被指责的错误解析就越少。
确定您是否只需要处理英国邮政电子邮件,或者是否可能出现全球地址至关重要。
根据您的示例,地址的某些部分似乎始终存在,但请检查this resource以确定它们是否真的需要在所有英国电子邮件地址中使用。
如果在所需的解析深度和可以安全的假设之间找到匹配,则应该能够通过逗号索引(FINDSTRING
)继续解析;从左边开始确定一些组件,从字符串右边开始一些组件;把所有剩下的东西都当作一个未被解剖的身体。
您可能还会发现,您当前的任务是不可能执行的任务,尤其是与国际邮政地址相关的任务。这就是为什么大多数网站和其他数据收集者都要求用户以已解析的形式输入邮政地址。
答案 1 :(得分:1)
Hanika提出的优秀观点。您的一些解析将取决于目标目标的样子。作为一个无知的猛拉,基于Hanika的链接,我认为你的输出看起来像
一般的想法是每行流经,你会想尽力将数据解析到那些桶中。使其“正确”的最佳解决方案是更改数据输入方法以验证并将数据捕获到这些离散桶中。由于最佳状态永远不会发生,因此您需要对浮渣进行分类以找到您的黄金。
虽然你可以用FINDSTRING写一些奇妙的表达,但在这种情况下我会反对它,因为单独的维护会让你发疯。相反,添加脚本转换并在.NET中构建解析逻辑(vb或c#)。然后会有一个循环,通过您的转换运行数据,并让某人关注结果。如果您找到新方案,则返回并调整业务规则。这很难看,它是迭代的,它很容易产生人类不会拥有的结果。
滚动地址标准化逻辑的替代方法