MySQL 8.0复杂字符串处理:寻求更简便的实现方案
更简便的MySQL 8.0实现方法
针对你固定格式的字符串,有两种更简洁的实现方式:
方法一:利用正则表达式一步完成(推荐,格式固定时)
MySQL 8.0支持REGEXP_REPLACE,可以通过正则捕获分组直接完成所有三个处理步骤:
SELECT REGEXP_REPLACE(original_str, '^M (\\S+) (\\S+) 0*(\\S+)$', '\\1-\\2-\\3') AS formatted_str FROM your_table;
正则说明:
^M:匹配开头的"M "并忽略(\\S+):分别捕获前两段非空格内容(如PL20、23)0*(\\S+):匹配第三段的所有前导零并忽略,仅捕获后续有效数字部分- 替换为
\\1-\\2-\\3直接拼接成目标格式
方法二:结合字符串拆分与数字类型转换
利用CAST转换为无符号整数自动去除前导零,再拼接结果:
SELECT CONCAT( REPLACE(SUBSTRING_INDEX(SUBSTRING(original_str, 2), ' ', 2), ' ', '-'), '-', CAST(SUBSTRING_INDEX(SUBSTRING(original_str, 2), ' ', -1) AS UNSIGNED) ) AS formatted_str FROM your_table;
步骤说明:
SUBSTRING(original_str, 2):去掉首字符"M"SUBSTRING_INDEX(..., ' ', 2):提取前两段内容,用REPLACE替换空格为"-"SUBSTRING_INDEX(..., ' ', -1):提取最后一段,CAST AS UNSIGNED自动去除前导零CONCAT拼接所有部分
这两种方法都比分步嵌套多个函数更简洁,其中方法一在字符串格式固定的情况下代码最紧凑。
内容的提问来源于stack exchange,提问作者Hamamelis
相关产品推荐
相关产品推荐

