SQL Server中如何正确提取逗号分隔字符串的最后一个值?
提取SQL Server中逗号分隔字符串的最后一个值
你的原语句报错是因为子查询没有用括号包裹,且早期SQL Server版本中STRING_SPLIT返回的结果顺序无显式保证,以下是几种正确写法:
方法一:修正你的反转思路
给子查询加上括号,同时显式指定排序确保取第一个拆分结果:
SELECT REVERSE((SELECT TOP 1 value FROM STRING_SPLIT(REVERSE('test,is,what,this,is'), ',') ORDER BY (SELECT NULL)))
注:ORDER BY (SELECT NULL)是为了在低兼容级别环境中确保结果顺序,SQL Server 2016+兼容级别130及以上时,STRING_SPLIT默认按输入顺序返回,但显式排序更稳妥。
方法二:利用SQL Server 2022+的ordinal参数(推荐)
SQL Server 2022及以后版本的STRING_SPLIT支持enable_ordinal参数,可直接通过序号取最后一个元素:
SELECT value FROM STRING_SPLIT('test,is,what,this,is', ',', 1) ORDER BY ordinal DESC OFFSET 0 ROWS FETCH NEXT 1 ROW ONLY
方法三:纯字符串函数实现(无需拆分,性能更优)
如果不需要拆分整个字符串,直接用字符串定位函数提取最后一段,效率更高:
SELECT RIGHT('test,is,what,this,is', CHARINDEX(',', REVERSE('test,is,what,this,is')) - 1)
原理:先反转字符串找到第一个逗号的位置,再用RIGHT截取原字符串对应长度的内容。
内容的提问来源于stack exchange,提问作者jonfarrugia
相关产品推荐
相关产品推荐

