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

MySQL如何裁剪字符串可变字符 实现字段格式统一匹配

MySQL字段格式统一裁剪实现方案

核心规律梳理

对照原始数据与目标结果,可提炼统一处理规则:

  • 目标值固定以4位年份开头,整体由4段内容通过3个下划线拼接
  • 原始值存在两类差异:部分行开头带UPL_冗余前缀,部分行直接以年份开头;所有行末尾带文件扩展名(.csv/.xlsx),部分csv文件在目标段后还带有_COST/_DRG冗余后缀

通用实现SQL(支持MySQL 8.0/5.7)

该写法无需提前枚举前缀内容,自动定位年份起始位置,适配后续可能出现的其他前缀场景:

SELECT
  SUBSTRING_INDEX(
    -- 定位4位年份+下划线的起始位置,裁掉前面所有冗余前缀
    SUBSTRING(col, REGEXP_INSTR(col, '[0-9]{4}_')),
    '_',
    -- 按下划线分割后取前4段,刚好得到含3个下划线的目标串,自动裁掉后续冗余后缀和扩展名
    4
  ) AS col1
FROM your_table_name;

低版本兼容SQL(支持MySQL 5.6及更早版本)

针对当前给出的固定前缀样本,无正则函数也可实现:

SELECT
  SUBSTRING_INDEX(
    -- 识别UPL_前缀做固定偏移裁剪
    IF(col LIKE 'UPL_%', SUBSTRING(col, 5), col),
    '_',
    4
  ) AS col1
FROM your_table_name;

执行结果验证

对提供的原始样本执行上述SQL,返回结果完全匹配预期:

col1
2019_NF_R1_01
2019_NF_R2_01
2019_NF_R1_01
2019_ICF_R8_01
2020_ICF_R8_02

函数逻辑说明

  • REGEXP_INSTR(col, '[0-9]{4}_'):返回连续4位数字+下划线的首次出现位置,即年份段的起始下标
  • SUBSTRING(字符串, 起始位置):从指定下标开始截取字符串到末尾,实现前缀裁剪
  • SUBSTRING_INDEX(字符串, 分隔符, 计数):按指定分隔符拆分字符串,返回前N个分段拼接的结果,计数传4时刚好得到4段内容,包含3个下划线
  • 低版本写法中IF(col LIKE 'UPL_%', SUBSTRING(col,5), col):针对已知固定前缀做偏移裁剪,适合前缀无变化的存量数据场景

内容的提问来源于stack exchange,提问作者miquiztli_

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 23:48:39