わかりました、これは難しいものです。次のような、アパートを表すさまざまな文字列を含むテーブルを作成します。
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です。