You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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č

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.03 10:12:22