Tsql 用T-SQL解析地址

Tsql 用T-SQL解析地址,tsql,Tsql,我试图弄明白如何使用T-SQL解析地址,我对T-SQL一窍不通。我的挑战是 我有一个名为“位置”的表,定义如下: - City [varchar(100)] - State [char(2)] - PostalCode [char(5)] 我的UI有一个文本框,用户可以在其中输入地址。这个地址可以是任何形式的(恶心,我知道)。不幸的是,我也无法更改此UI。无论如何,文本框的值被传递到负责解析地址的存储过程中。我需要获取用户输入的内容,并从与其输入相关联的位置表中获取PostalCode。就我个

我试图弄明白如何使用T-SQL解析地址,我对T-SQL一窍不通。我的挑战是

我有一个名为“位置”的表,定义如下:

- City [varchar(100)]
- State [char(2)]
- PostalCode [char(5)]
我的UI有一个文本框,用户可以在其中输入地址。这个地址可以是任何形式的(恶心,我知道)。不幸的是,我也无法更改此UI。无论如何,文本框的值被传递到负责解析地址的存储过程中。我需要获取用户输入的内容,并从与其输入相关联的位置表中获取PostalCode。就我个人而言,我不知道该怎么做。案例太多了。例如,用户可以输入以下内容之一:

  • 伊利诺伊州芝加哥
  • 伊利诺伊州芝加哥60601
  • 伊利诺伊州芝加哥,60601
  • 美国伊利诺伊州芝加哥60601
  • 芝加哥,伊利诺伊州,60601美国
  • 芝加哥伊利诺伊州60601美国
  • 纽约NY 10001美国
  • 美国纽约州纽约市,邮编:10001

你明白了。案例很多。我在网上也找不到任何解析器。我一定是看得不对。有人能告诉我一个在线解析器或者解释一下怎么做吗?我愿意为这个问题的解决方案付费,但我什么也找不到,我感到震惊。

也许CLR函数比tsql更好。查看使用正则表达式将一些非常复杂的字符串输入解析为表值结果的示例。现在,您可以通过正则表达式匹配发挥自己的创造力,但以下正则表达式应该可以让您开始:

(.*?)([A-Z]{2}),? (\d+)( USA)?$
如果您不愿意使用CLR函数,那么可能在调用系统中有正则表达式功能,如ASP.Net或PHP