2017-10-11 79 views
2

我想从一个地址中提取城市,其中所有内容都在一列中,在最后一个和第二个之间逗号。我试图从一个地址中提取城市,其中一切都在一列中,在最后一个和第二个到最后一个逗号之间

例如Address列包含

LYNDEN COURT,CHARTWELL,HAMILTON,3210 

CNR DIXON & BANNISTER STREETS,MASTERTON,MASTERTON,5810 

3C,SHORT STREET,NEWMARKET,AUCKLAND,1023 

正如你所看到的,并不总是相同数量的逗号的。但在这些例子中,我需要提取“汉密尔顿”,“马斯特顿”和“奥克兰”。

希望它作为select语句的一部分以及同一表中的其他字段。

使用SQL Server 2008 R2,而且还使用SSMS 2014年访问服务器

回答

1

我可能过于复杂这一点,但你可以尝试

DECLARE @var VARCHAR(50) = 'CNR DIXON & BANNISTER STREETS,MASTERTON,MASTERTON,5810' 

SELECT REVERSE(SUBSTRING(REVERSE(@var), CHARINDEX(',',REVERSE(@var)) +1, CHARINDEX(',', REVERSE(@var), CHARINDEX(',',REVERSE(@var)) + 1) - CHARINDEX(',',REVERSE(@var)) -1)) 
+0

真棒,伟大工程!我不确定如何使用@var部分,所以只需将字段名替换,并且工作良好。但是,当我在整个表上运行它时,出现错误>消息537,级别16,状态3,行2 传递给LEFT或SUBSTRING函数的长度参数无效。但如果我只是运行YTD,它就可以工作。这是否意味着我有一些不好的数据或者其中一个值太长? –

+0

@EvanJones我的猜测是会有一些数据可能没有2个逗号或任何逗号,这会使长度参数为负数。 – SQLChao

相关问题