我试图从一个地址中提取城市,其中一切都在一列中,在最后一个和第二个到最后一个逗号之间
问题描述:
我想从一个地址中提取城市,其中所有内容都在一列中,在最后一个和第二个之间逗号。我试图从一个地址中提取城市,其中一切都在一列中,在最后一个和第二个到最后一个逗号之间
例如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年访问服务器
答
我可能过于复杂这一点,但你可以尝试
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))
真棒,伟大工程!我不确定如何使用@var部分,所以只需将字段名替换,并且工作良好。但是,当我在整个表上运行它时,出现错误>消息537,级别16,状态3,行2 传递给LEFT或SUBSTRING函数的长度参数无效。但如果我只是运行YTD,它就可以工作。这是否意味着我有一些不好的数据或者其中一个值太长? –
@EvanJones我的猜测是会有一些数据可能没有2个逗号或任何逗号,这会使长度参数为负数。 – SQLChao