繁体   English   中英

SQL-提取两个字符之间的子字符串

[英]SQL - Extracting a substring between two characters

我试图从数据库中的长字符串中提取城市名称。 这是几个不同位置的数据外观示例。

"701 MONROE STREET NW RUSSELLVILLE, AL 35653 (34.514971, -87.736372)"
"1825 HOLTVILLE ROAD WETUMPKA, AL 36092 (32.558544, -86.221265)"

我只想为城市名称创建一列。 我的想法是将所有内容都用在杉木逗号的左边和右边空格的右边。 我尝试了几种不同的方法来解决这个问题,但是我可能会缺少一些东西。

SELECT  left(Location, CHARINDEX(',', location)) as city FROM table

这将返回第一个逗号的所有剩余内容。

"701 MONROE STREET NW RUSSELLVILLE,
"1825 HOLTVILLE ROAD WETUMPKA,

但是,现在我想返回逗号的所有内容以及该字符串中最后一个空格的所有内容,而我对于如何正确提取该信息感到困惑。 任何帮助,将不胜感激。

谢谢,帕特

使用REVERSE可以解决以下问题:

SELECT reverse(
            left(
             reverse(
               left(
                 Location, 
                 CHARINDEX(',', location)-1
               )
              ),
              CHARINDEX(' ', reverse(
                 left(
                   Location, 
                   CHARINDEX(',', location)-1
                 )
               )
             )
           )
  )as city FROM table;

小提琴

如果我在上面的评论中提到的Google API是无法选择的。 您可以下载(甚至购买)邮政编码数据库。 费用是象征性的。 我建议每季度更新一次,因为邮政编码会随时间而变化(添加/编辑/删除)

Declare @YourTable table (id int,addr varchar(250))
Insert Into @YourTable values
(1,'701 MONROE STREET NW RUSSELLVILLE, AL 35653 (34.514971, -87.736372)'),
(2,'1825 HOLTVILLE ROAD WETUMPKA, AL 36092 (32.558544, -86.221265)')

Select A.ID
      ,StreetAddress =left(addr,nullif(charindex(Z.CityName,addr),0)-1)
      ,Z.CityName
      ,Z.StateCode
      ,Z.ZIPCode
 From @YourTable A
 Join [dbo].[OD-Zip] Z 
   on Z.ZipCode = substring(addr,nullif(patindex('%[0-9][0-9][0-9][0-9][0-9]%',addr),0),5)
      and charindex(Z.CityName,addr)>0
      and Z.ZipType='S'
      and Z.CityType='D'

返回

ID  StreetAddress           CityName        StateCode   ZIPCode
1   701 MONROE STREET NW    Russellville    AL          35653
2   1825 HOLTVILLE ROAD     Wetumpka        AL          36092

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM