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

MySQL中使用SUBSTRING_INDEX提取字符串丢失内容的解决方法

解决MySQL中多分隔符字符串的截取问题

嘿,这个问题我太熟悉了!你现在用SUBSTRING_INDEX取-1的时候,它会直接定位到最后一个-的位置,然后返回后面的内容,所以对于24015902-C-72这种有两个-的字符串,自然就只拿到了72,把中间的C-给丢了。

要解决这个问题,我们需要换个思路:拿到第一个-之后的所有内容,不管后面还有多少个分隔符。这里给你两种实用的方法:

方法一:用LOCATE+SUBSTRING精准截取

LOCATE可以帮我们找到第一个-的位置,然后用SUBSTRING从这个位置的下一位开始截取到字符串末尾,这样就能保留所有后续内容了:

SELECT 
  SUBSTRING_INDEX('24015902-C-72', '-', 1) AS ResultString1,
  SUBSTRING('24015902-C-72', LOCATE('-', '24015902-C-72') + 1) AS ResultString2,
  SUBSTRING_INDEX('24018504-147', '-', 1) AS ResultString3,
  SUBSTRING_INDEX('24018504-147', '-', -1) AS ResultString4;

执行这个查询后,结果就会是你想要的:

+---------------+---------------+---------------+---------------+
| ResultString1 | ResultString2 | ResultString3 | ResultString4 |
+---------------+---------------+---------------+---------------+
| 24015902      | C-72          | 24018504      | 147           |
+---------------+---------------+---------------+---------------+

方法二:批量处理表数据时的替换法

如果你的需求是处理表中的批量数据,而不是单个字符串,可以用REPLACE结合SUBSTRING_INDEX,先去掉第一个-之前的部分,剩下的就是后面的内容:

假设你的表名为your_table,字符串列名为code,可以这样写:

SELECT 
  SUBSTRING_INDEX(code, '-', 1) AS part1,
  REPLACE(code, CONCAT(SUBSTRING_INDEX(code, '-', 1), '-'), '') AS part2
FROM your_table;

这个方法会自动适配只有一个-或者多个-的字符串,统一返回第一个分隔符前后的内容。

内容的提问来源于stack exchange,提问作者Chevy Mark Sunderland

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:28:20