在SQL Server 2012中提取前四个逗号分隔值
SQL Server 2012 提取逗号分隔列的前四个值
提取前四个值的代码
针对你的需求,我们可以通过嵌套CHARINDEX函数定位第四个逗号的位置,再用SUBSTRING截取目标内容,代码如下:
SELECT SUBSTRING(Column1, 1, CHARINDEX(',', Column1, CHARINDEX(',', Column1, CHARINDEX(',', Column1, CHARINDEX(',', Column1, 1) + 1) + 1) + 1) - 1) AS FirstFourValues FROM YourTable
执行后就能得到你期望的结果:f,a,bcd,gd。如果允许保留最后一个逗号(即结果为f,a,bcd,gd,),只需去掉代码末尾的-1即可。
代码逻辑拆解
CHARINDEX函数的作用是查找指定字符在字符串中的位置,嵌套使用就能依次定位第N个逗号:
- 最内层
CHARINDEX(',', Column1, 1):找到第一个逗号的位置 - 第二层
CHARINDEX(',', Column1, 第一个逗号位置 + 1):从第一个逗号的下一位开始,找到第二个逗号的位置 - 第三层
CHARINDEX(',', Column1, 第二个逗号位置 + 1):从第二个逗号的下一位开始,找到第三个逗号的位置 - 最外层
CHARINDEX(',', Column1, 第三个逗号位置 + 1):从第三个逗号的下一位开始,找到第四个逗号的位置 SUBSTRING(Column1, 1, 第四个逗号位置 - 1):从字符串开头截取到第四个逗号的前一位,最终得到前四个逗号分隔的值
解释你找到的前三个值提取代码
你提供的这段代码逻辑和上面一致,只是嵌套次数更少,用来提取前三个值:
SELECT SUBSTRING(Column1, 1, CHARINDEX(',', Column1, (CHARINDEX(',', Column1, (CHARINDEX(',', Column1, 1) + 1)) + 1)) - 1)
拆解逻辑:
- 三次嵌套
CHARINDEX依次定位到第三个逗号的位置 - 用
SUBSTRING截取到第三个逗号的前一位,从而得到前三个逗号分隔的值
兼容不足四个值的场景
如果部分行的列值不足四个逗号分隔项,可以用CASE做兼容处理,避免截取出错:
SELECT CASE WHEN LEN(Column1) - LEN(REPLACE(Column1, ',', '')) >= 3 THEN -- 判断是否至少有4个值(即至少3个逗号) SUBSTRING(Column1, 1, CHARINDEX(',', Column1, CHARINDEX(',', Column1, CHARINDEX(',', Column1, CHARINDEX(',', Column1, 1) + 1) + 1) + 1) - 1) ELSE Column1 -- 不足4个值时返回原字符串 END AS FirstFourValues FROM YourTable
内容的提问来源于stack exchange,提问作者Soaps
相关产品推荐
相关产品推荐

