0

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

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

我有一个名为 Address_length 的表,其中包含 2 个地址列(address_1 和 address_2) address_2 应该包含公寓信息。

使用 address_1 中的信息字符串更新 address_2 的最简单方法是什么。如果我看到“Apt”或“Apartment”这个词,我想在该列中包含该词以及它的所有权利。

因此,对于上述示例,输出将如下所示。

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

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

4

1 回答 1

2

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

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 ║
╚═════════════════════════════════╩══════════════════════╩═══════════════╝

当定义公寓的字符串包含在另一个字符串中时(即:apartapartment),您将有重复。误报的可能性也很大,这意味着您可以拥有包含apt但并不意味着公寓的地址。

这是一个sqlfiddle 供您尝试。

于 2013-08-08T18:57:19.600 回答