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
相关产品推荐
相关产品推荐

