2013-12-11 71 views
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命令中的表達式?

實質上,我正在運行一次檢查,看看字符串是否包含另一個表中的任何值,如果是,則創建一個包含該值的子字符串。

回答

1

如果在NameAddress

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

SQL Fiddle demo

存在BTW該查詢會給你的NameAddressCity列表從geography表,它會爲真實地址會奏效嗎?如果一個城市的名字在街道名稱中怎麼辦?

+0

爲了減少誤報的次數,您可以在調用CHARINDEX時在城市名稱前後添加空格。假設城市名稱始終位於地址的中間(從不在最後),這就像是一個「全字」搜索。 – acfrancis

+1

非常感謝!你的答案完美無缺。現在我需要從字符串的開頭突出名稱,我想我需要一種不同的方法。我知道有可能創建一個到達某個點的所有字符的子字符串,即「Inc.」。是否有可能爲多種標準做到這一點,即Inc.或Corp.或Ltd.等?我將所有業務實體類型存儲在一個單獨的表中。 – gnarkill619

+0

是的,這是可能的。我想你可以使用類似的方法。 – Szymon