Sql server 2008 r2 我试图从一个地址中提取城市,其中所有内容都在一列中,介于最后一个逗号和倒数第二个逗号之间

Sql server 2008 r2 我试图从一个地址中提取城市,其中所有内容都在一列中,介于最后一个逗号和倒数第二个逗号之间,sql-server-2008-r2,Sql Server 2008 R2,我试图从一个地址中提取城市,其中所有内容都在一列中,介于最后一个逗号和倒数第二个逗号之间 例如,地址列包含 LYNDEN COURT,CHARTWELL,HAMILTON,3210 CNR DIXON & BANNISTER STREETS,MASTERTON,MASTERTON,5810 3C,SHORT STREET,NEWMARKET,AUCKLAND,1023 正如您所看到的,逗号的数目并不总是相同的。但我需要在这些例子中提取“汉密尔顿”、“马斯顿”和“奥克兰” 希望

我试图从一个地址中提取城市,其中所有内容都在一列中,介于最后一个逗号和倒数第二个逗号之间

例如,
地址
列包含

 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部分,所以只需将字段名替换下来,效果就很好了。但是当我在整个表上运行它时,我得到一个错误>Msg 537,级别16,状态3,第2行无效长度参数,传递给LEFT或SUBSTRING函数。但如果我只是在年初至今运行它,它就会工作。这是不是意味着我有一些不好的数据,或者其中一个值太长了?@EvanJones我猜有些数据可能没有2个逗号或任何逗号,这会使长度参数为负数。