MySQL 5.7中如何截取列值中的指定子串?
在MySQL 5.7中去除
gruppo-\d+_前缀的实现方法 因为MySQL 5.7没有REGEXP_REPLACE,但可以用内置的字符串函数或正则函数实现需求,分两种场景给出方案:
场景1:所有字符串严格符合gruppo-数字_开头格式
如果你的数据都是标准格式,直接用LOCATE和SUBSTRING组合即可,效率更高:
SELECT SUBSTRING(your_column, LOCATE('_', your_column) + 1) AS extracted_text FROM your_table;
原理:LOCATE('_', your_column)找到第一个下划线的位置(也就是数字后的下划线),从该位置的下一位开始截取,就能得到后面的内容。
场景2:需要兼容非标准格式(部分字符串不匹配前缀)
如果存在不符合格式的字符串,需要保留原内容,可以结合正则判断和REGEXP_INSTR实现:
SELECT CASE WHEN your_column REGEXP '^gruppo-[0-9]+_' THEN SUBSTRING(your_column, REGEXP_INSTR(your_column, '^gruppo-[0-9]+_', 1, 1, 1) + 1) ELSE your_column END AS extracted_text FROM your_table;
也可以用REGEXP_SUBSTR直接提取捕获组内容,写法更简洁:
SELECT REGEXP_SUBSTR(your_column, '^gruppo-[0-9]+_(.*)$', 1, 1, '', 1) AS extracted_text FROM your_table;
原理:正则表达式中的(.*)捕获前缀后的所有内容,通过REGEXP_SUBSTR的第6个参数指定提取第一个捕获组的结果。
内容的提问来源于stack exchange,提问作者Luca Reghellin
相关产品推荐
相关产品推荐

