Sql server 2008 解析地址中的信息

Sql server 2008 解析地址中的信息,sql-server-2008,tsql,Sql Server 2008,Tsql,我目前有一个地址,可能看起来像这样 5235 Georgia Street Apt 8 436 Oregon Avenue Apartment # 5 ... etc address_1 address_2 5235 Georgia Street Apt 8 436 Oregon Avenue Apartment # 5 我有一个名为Address_length的表,有两个地址列(Address_1和Address_2) 地址2应该包含公寓信息 用地

我目前有一个地址,可能看起来像这样

5235 Georgia Street Apt 8
436 Oregon Avenue Apartment # 5
... etc
address_1              address_2
5235 Georgia Street    Apt 8
436 Oregon Avenue      Apartment # 5
我有一个名为Address_length的表,有两个地址列(Address_1和Address_2) 地址2应该包含公寓信息

用地址_1中的字符串信息更新地址_2的最简单方法是什么。 如果我看到Apt或公寓这个词,我想把这个词和它右边的所有东西都包括在那个专栏里

因此,在上面的示例中,输出如下所示

5235 Georgia Street Apt 8
436 Oregon Avenue Apartment # 5
... etc
address_1              address_2
5235 Georgia Street    Apt 8
436 Oregon Avenue      Apartment # 5

任何帮助或想法都将不胜感激。

好的,这是一个困难的问题。我会用不同的字符串创建一个代表公寓的表格,如下所示:

INSERT INTO ApartmentsStrings
VALUES (N'apt'),(N'apartment');
然后我会做以下几件事:

SELECT  A.[Address] OriginalAddress,
        CASE WHEN B.Position IS NOT NULL 
        THEN LEFT(A.[Address],B.Position-1) 
        ELSE A.[Address] END Address_1,
        CASE WHEN B.Position IS NOT NULL 
        THEN SUBSTRING(A.[Address],B.Position,LEN(A.[Address])-B.Position+1) END Address_2
FROM Address A
OUTER APPLY(SELECT PATINDEX('%'+String+'%',A.[Address]) Position
            FROM ApartmentsStrings
            WHERE PATINDEX('%'+String+'%',A.[Address]) > 0) B
结果是:

╔═════════════════════════════════╦══════════════════════╦═══════════════╗
║         OriginalAddress         ║      Address_1       ║   Address_2   ║
╠═════════════════════════════════╬══════════════════════╬═══════════════╣
║ 5235 Georgia Street Apt 8       ║ 5235 Georgia Street  ║ Apt 8         ║
║ 436 Oregon Avenue Apartment # 5 ║ 436 Oregon Avenue    ║ Apartment # 5 ║
╚═════════════════════════════════╩══════════════════════╩═══════════════╝
当定义单元的字符串包含在另一个单元中时(即:
分开
单元
)。也有很大的可能出现误报,这意味着你可以拥有包含
apt
的地址,但这并不意味着公寓

sqlfiddle供您尝试