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供您尝试