0

私は現在、このようなアドレスを持っています。

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

2 つの住所列 (address_1 と address_2) を持つ Address_length というテーブルがあります。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 ║
╚═════════════════════════════════╩══════════════════════╩═══════════════╝

apartアパートメントを定義する文字列が別のアパートメントに含まれている場合 (例: and ) 、重複がありますapartment。また、偽陽性の可能性が非常に高くなります。つまり、aptアパートを意味するものではなく、住所が含まれている可能性があります。

これはあなたが試すためのsqlfiddleです。

于 2013-08-08T18:57:19.600 に答える