如何用SUBSTRING_INDEX拆分数据库size字段中的数字与单位?
拆分数据库size列的数字与单位部分
针对你提到的size列数据(236ml、50g、100g、6 x 2pk),要拆分数字和单位部分,单纯用SUBSTRING_INDEX不太适配——它依赖固定分隔符,而你的数据没有统一分隔符,推荐结合正则相关函数实现,以MySQL为例:
方法一:定位非数字位置拆分
通过REGEXP_INSTR找到第一个非数字字符的位置,再用SUBSTRING拆分:
SELECT size, SUBSTRING(size, 1, REGEXP_INSTR(size, '[^0-9]') - 1) AS number_part, TRIM(SUBSTRING(size, REGEXP_INSTR(size, '[^0-9]'))) AS unit_part, CONCAT( SUBSTRING(size, 1, REGEXP_INSTR(size, '[^0-9]') - 1), ': ', TRIM(SUBSTRING(size, REGEXP_INSTR(size, '[^0-9]'))) ) AS result FROM your_table;
执行后会输出你要的格式:
236: ml50: g100: g6: 2pk
方法二:正则直接匹配拆分
用REGEXP_SUBSTR直接匹配数字段和单位段,写法更简洁:
SELECT size, REGEXP_SUBSTR(size, '^[0-9]+') AS number_part, TRIM(REGEXP_SUBSTR(size, '[^0-9].*$')) AS unit_part, CONCAT( REGEXP_SUBSTR(size, '^[0-9]+'), ': ', TRIM(REGEXP_SUBSTR(size, '[^0-9].*$')) ) AS result FROM your_table;
如果你非要用SUBSTRING_INDEX,得先给所有数据统一加分隔符(比如在首个非数字前插入冒号),但这种操作多此一举,不如正则方案直接高效。
内容的提问来源于stack exchange,提问作者Sweet Carrot
相关产品推荐
相关产品推荐

