SQL如何提取字符串中第二个逗号后的目标子串
SQL提取字符串第二个逗号后目标子串实现方案
需求说明
待处理原始字符串:'Ing. , Jožko, Mrkvička, Bc.'
目标提取结果:'Mrkvička'
核心实现逻辑:定位字符串中第二个、第三个逗号的位置,截取两个位置之间的内容,同时清除内容前后的多余空格。
不同数据库的具体实现
MySQL 5.x/8.x 版本
用内置的SUBSTRING_INDEX函数嵌套实现,写法最简洁:SELECT TRIM( SUBSTRING_INDEX( SUBSTRING_INDEX('Ing. , Jožko, Mrkvička, Bc.', ',', 3), ',', -1 ) ) AS target_result;执行逻辑:内层函数先截取前3个逗号之前的所有内容,得到
'Ing. , Jožko, Mrkvička';外层函数从上述结果中截取最后一个逗号之后的内容,最后用TRIM清除前后空格即可得到目标值。PostgreSQL 版本
用SPLIT_PART函数直接按分隔符拆分后取指定分段,分段序号从1开始计数:SELECT TRIM( SPLIT_PART('Ing. , Jožko, Mrkvička, Bc.', ',', 3) ) AS target_result;按逗号拆分后第3段正好是
Mrkvička,去空格后即为目标结果。SQL Server 版本
通过嵌套CHARINDEX函数定位逗号位置,再用SUBSTRING截取对应区间:SELECT TRIM( SUBSTRING( raw_str, second_comma + 1, third_comma - second_comma - 1 ) ) AS target_result FROM ( SELECT 'Ing. , Jožko, Mrkvička, Bc.' AS raw_str, CHARINDEX(',', 'Ing. , Jožko, Mrkvička, Bc.', CHARINDEX(',', 'Ing. , Jožko, Mrkvička, Bc.')+1) AS second_comma, CHARINDEX(',', 'Ing. , Jožko, Mrkvička, Bc.', CHARINDEX(',', 'Ing. , Jožko, Mrkvička, Bc.', CHARINDEX(',', 'Ing. , Jožko, Mrkvička, Bc.')+1)+1) AS third_comma ) AS pos_calc;Oracle 版本
用正则函数REGEXP_SUBSTR按逗号分隔匹配第3个分段即可:SELECT TRIM( REGEXP_SUBSTR('Ing. , Jožko, Mrkvička, Bc.', '[^,]+', 1, 3) ) AS target_result FROM DUAL;
注意:以上方案默认待处理字符串至少包含3个逗号,如果业务数据存在格式不规范、逗号数量不足3个的情况,需要提前增加格式校验逻辑,避免返回非预期结果。
内容的提问来源于stack exchange,提问作者Denis Navračič
相关产品推荐
相关产品推荐

