当值多次出现时,通过索引到另一列处理中的值来从一列创建有效地址

Create valid addresses from a column by indexing to values in another column handling when the value occurs more than once

我有一个包含大约 6000 行的地址数据集,其中一列包含完整地址 ("Full_Address")。该列包含以下格式的地址:街道地址,city/community,邮编(例如 7257 N WYOMING RD WYOMING,61491)。我希望地址仅包含街道地址(例如 7257 N Wyoming RD)。我还有一个社区专栏(例如怀俄明州)。我一直在使用社区栏来提取地址。代码如下:

CASE WHEN Community NOT IN ('','None','<Null>','0')
THEN SUBSTRING(Full_Address,0,CHARINDEX(Community,Full_Address))

当街道名称和社区名称不同时,此代码运行良好,但当它们相同时(如上例所示),它会给出以下输出:7257 N。有什么办法可以指定如果社区名称在地址中出现两次,则索引到第二次出现而不是第一次出现?我无法使用任何其他列来提取地址,因为“Full_Address”列是唯一包含该信息的列。我也不能使用 CHARINDEX 来查找“,”,因为有些列没有逗号分隔街道地址和社区(如示例中所示)。

谢谢!

我认为为了获得更准确的结果,以防有人添加不带逗号的地址,您应该从末尾开始搜索,如下所示:

LEFT(Full_Address , LEN(Full_Address) - (CHARINDEX(REVERSE(Community),REVERSE(Full_Address))+LEN(Community)))

您可以在您的 SSMS 上使用此代码对其进行测试:

declare @Full_Address as nvarchar(100)
set @Full_Address = '7257 N WYOMING RD WYOMING, 61491'
declare @Community as nvarchar(100)
set @Community = 'WYOMING'
select LEFT(@Full_Address , LEN(@Full_Address) - (CHARINDEX(REVERSE(@Community) ,REVERSE(@Full_Address))+LEN(@Community)))