【问题标题】:Splitting Address Lines in MS SQL在 MS SQL 中拆分地址行
【发布时间】:2026-02-03 21:10:01
【问题描述】:

我有这个设置:一个输出表,我的结果最终将包含

[FirstName]
[LastName]
[Address1]
[Address2]
[Address3]
[ZipCode]
[City]
[Country]

原始数据多为换行分割地址行,有的用逗号分割,还有一个名称字段。

我的原始数据表看起来很简单:

[NAME ]
[ADDRESS]

如何使用 T-SQL 将它们相互转换?

感谢您的宝贵时间。

马特

【问题讨论】:

  • 请贴出你目前写的代码。人们通常不喜欢只为您编写代码。
  • 除非您的数据具有异常一致的模式,否则我怀疑您是否可以自动准确地执行此操作 - 至少在没有第三方地址解析库的情况下。例如,您是否保证所有地址的邮政编码总是在同一行?

标签: sql-server tsql split


【解决方案1】:

您真正的问题是,如何将 [ADDRESS] 的内容解析为单独的属性?我现在会忘记 TSQL 并调查源数据的质量,看看理论上解析有多容易(或难易)。然后找到一个实用的解决方案。一些随机的 cmets:

  • 地址数据是出了名的“脏”,解析它通常很困难,尤其是国际数据。
  • TSQL 通常不是用于文本操作的好语言;如果您最终决定自己解析数据,那么几乎可以肯定,您应该使用数据库之外的另一种语言(C#、Perl、Python 等)。
  • 即使您已经拥有非常干净的数据,TSQL 中也没有 SPLIT() 函数。编写一个很容易,但 String.Split() 或您喜欢的语言的等价物可能会更快、更容易。因此,即使您确实拥有大量干净的数据,也请考虑使用外部程序或可能的 .NET 存储过程。
  • 如果您有大量数据,请寻找可以为您解析和验证地址数据的公司;通常,它们提供批量解决方案和按需 Web 服务。您可能认为这很昂贵,但他们可以做您可能做不到的事情(例如,根据不同国家/地区的邮政数据库模糊匹配地址),并且与您现在的时间成本和未来的维护成本相比,您可能会发现它实际上更便宜。
  • 如果您绝对必须自己解析数据,请确保您开发了大量的单元测试。

【讨论】: