用另一个表中的值替换CHARINDEX和LEN中的表达式

时间:2013-12-11 22:11:15

标签: sql parsing expression charindex

我有数千条记录,这些记录是在一个字段(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命令中的表达式?

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

1 个答案:

答案 0 :(得分:1)

如果NameAddress

中存在Citygeography,则此查询将为您提供NameAddressselect a.NameAddress, ISNULL(g.City, '') from address a left join geography g on CHARINDEX(g.City, a.NameAddress) > 0 的列表
{{1}}

SQL Fiddle demo

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