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

MySQL字符串处理求助:特定格式字符串转换结果异常问题

哈哈,我找到问题根源了!先看你的SQL,你处理第二个字符串X322-1-383128的时候,前面的a/b/c/d测试字段居然还是用第一个字符串计算的——不过这只是测试显示的小问题,更关键的是你对第三部分的截取逻辑错了,导致第二个结果没得到预期的X322138328。

问题核心分析

你的需求是把X322-1-381128转成X322138128、X322-1-383128转成X322138328,本质是:去掉所有-后,还要删掉第三段里的第4个字符(也就是那个多余的1),或者说第三段取「前3位+后2位」。

你之前取的是第三段的前2位(38)+最后3位(128),所以不管第三段是381128还是383128,拼出来都是38128,自然两个结果完全一样。

正确解决方案

给你两种写法,第一种是通用拆分写法(适合字段格式固定但各段长度可能变化的场景),第二种是针对当前固定格式的简化写法:

写法一:通用拆分法(推荐)

用SUBSTRING_INDEX拆分各段,再针对性处理第三部分,兼容性更强:

SELECT 
  -- 处理第一个字符串
  'X322-1-381128' AS original_str,
  CONCAT(
    SUBSTRING_INDEX('X322-1-381128', '-', 1), -- 取第一部分:X322
    SUBSTRING_INDEX(SUBSTRING_INDEX('X322-1-381128', '-', 2), '-', -1), -- 取第二部分:1
    SUBSTRING(SUBSTRING_INDEX('X322-1-381128', '-', -1), 1, 3), -- 取第三部分前3位:381
    SUBSTRING(SUBSTRING_INDEX('X322-1-381128', '-', -1), -2) -- 取第三部分后2位:28
  ) AS target_str
UNION ALL
SELECT 
  -- 处理第二个字符串
  'X322-1-383128' AS original_str,
  CONCAT(
    SUBSTRING_INDEX('X322-1-383128', '-', 1),
    SUBSTRING_INDEX(SUBSTRING_INDEX('X322-1-383128', '-', 2), '-', -1),
    SUBSTRING(SUBSTRING_INDEX('X322-1-383128', '-', -1), 1, 3),
    SUBSTRING(SUBSTRING_INDEX('X322-1-383128', '-', -1), -2)
  ) AS target_str;

运行后会得到符合预期的结果:

+---------------+------------+
| original_str  | target_str |
+---------------+------------+
| X322-1-381128 | X322138128 |
| X322-1-383128 | X322138328 |
+---------------+------------+

写法二:固定位置截取法

如果你的字符串格式永远是Xxxx-1-xxxxxx这种固定长度,可以直接按字符位置截取,更简洁:

SELECT 
  'X322-1-381128' AS original_str,
  CONCAT(
    SUBSTRING('X322-1-381128', 1, 4), -- X322
    SUBSTRING('X322-1-381128', 6, 1), -- 1
    SUBSTRING('X322-1-381128', 8, 3), -- 381
    SUBSTRING('X322-1-381128', 11, 2) -- 28
  ) AS target_str
UNION ALL
SELECT 
  'X322-1-383128' AS original_str,
  CONCAT(
    SUBSTRING('X322-1-383128', 1, 4),
    SUBSTRING('X322-1-383128', 6, 1),
    SUBSTRING('X322-1-383128', 8, 3),
    SUBSTRING('X322-1-383128', 11, 2)
  ) AS target_str;

另外,我把两个字符串的处理用UNION ALL分开,避免了之前混淆测试字段的问题,逻辑更清晰。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:45:37