我目前有一个可能看起来像这样的地址。
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
任何帮助或想法都将不胜感激。
答案 0 :(得分: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
和apartment
)。还有很大的误报可能性,这意味着您可以拥有包含apt
的地址,但这并不代表公寓。
Here is an sqlfiddle给你试试。