0

我有数千条记录,它们是企业名称和地址,它们串在一个字段 (NameAddress) 中:

Microsoft 1 157th Ave NE Redmond WA 98052
Apple Inc 1 Infinite Loop Cupertino CA 95014
Kraft Beton GmbH Industriestraße 123 1220 Wien
Pletzenauer Holzbau GmbH Moosnerweg 9 6382 Kirchdorf in Tirol

我想将城市解析为自己的领域。我有一个查询做得很好,但一次只适用于一个城市:

CASE WHEN CHARINDEX('wien',NameAddress) > 0 THEN
SUBSTRING(NameAddress,(CHARINDEX('wien',NameAddress)),LEN('wien')) ELSE '' END
AS City

我有一个表 dbo.geography 包含所有这些城市的名称。是否可以将该表中的值用作上述查询中 CHARINDEX 和 LEN 命令中的表达式?

本质上,我正在检查字符串是否包含另一个表中的任何值,如果是,则创建一个包含该值的子字符串。

4

1 回答 1

1

如果该NameAddress查询存在CitygeographyNameAddress

select a.NameAddress, ISNULL(g.City, '')
from address a
left join geography g
  on CHARINDEX(g.City, a.NameAddress) > 0

SQL Fiddle 演示

顺便说一句,它适用于真实地址吗?如果城市名称在街道名称中怎么办?

于 2013-12-11T22:20:43.817 回答