如何移除数据库字符串中第三个数字前的内容?SQL字符串处理求助
解决方案
1. 数据库直接处理(以 MySQL 为例)
如果需要在查询数据库时直接提取物料名称,可以组合使用字符串和正则函数完成:
代码示例
SELECT REGEXP_REPLACE(SUBSTRING_INDEX(name, ' / ', -1), '^[0-9]+ ', '') AS material_name FROM materials;
操作逻辑
- 先用
SUBSTRING_INDEX(name, ' / ', -1)提取第二个/分隔符之后的内容,比如从302 / 1001 / 8 ДЮБЕЛ 8/60中得到8 ДЮБЕЛ 8/60; - 再用
REGEXP_REPLACE去掉这部分开头的数字序列和后面的空格,最终留下纯物料名称。
2. 代码层面处理(以 PHP 为例)
如果是在业务代码里处理这些字符串,用正则表达式可以一步到位:
基础版代码
$rawMaterials = [ "302 / 1001 / 8 ДЮБЕЛ 8/60", "304 / 1001 / 32 НИВИЛИР АЛУМИНИЕВ AV 180", "232 / 1004 / 34 РЕДУЦИР-ВЕНТИЛ ЗА КИСЛОРОД А ТИП", "549 / 1034 / 10051 ТРЪБА НЕРЪЖДАЕМА ШЕВНА 3/4\"", "455 / 1034 / 10053 ТРЪБА НЕРЪЖДАЕМА ШЕВНА 1 1/4\"", "603 / 7000 / 10086 ТРЪБА ПОДЦИНКОВАНА 2\"", "333 / 4001 / 10101 ТРЪБА ППР Ф 25 ММ.", "344 / 1002 / 10102 ТРЪБА ППР Ф 20 ММ." ]; foreach ($rawMaterials as $str) { $cleanName = preg_replace('/^\d+ \/ \d+ \/ \d+ /', '', $str); echo $cleanName . "\n"; }
兼容空格不固定的版本
如果原字符串中分隔符前后的空格数量不确定,可以用更灵活的正则:
$cleanName = preg_replace('/^\d+\s*\/\s*\d+\s*\/\s*\d+\s+/', '', $str);
操作逻辑
正则表达式会精准匹配字符串开头的「数字 + 分隔符 + 数字 + 分隔符 + 数字 + 空格」这一段,直接替换为空字符串,剩下的就是需要的物料名称。
内容的提问来源于stack exchange,提问作者k1op0ly apps
相关产品推荐
相关产品推荐

