请求编写SQL查询:为B1/B2前缀的modelName字段末尾数字前加0
处理modelName字段的SQL查询方案
需求回顾
- 对
models表中modelName字段:- 若值以字母+数字开头(如
B1-xxx、C1-xxx),在最后一位字符前插入0(例:B1-01-A-1→B1-01-A-01) - 若值以单个字母开头(如
A-xxx),保持原字符串不变
- 若值以字母+数字开头(如
查询语句(MySQL)
查看转换结果(不修改原数据)
SELECT modelName, CASE WHEN modelName REGEXP '^[A-Za-z][0-9]-' THEN CONCAT(LEFT(modelName, LENGTH(modelName) - 1), '0', RIGHT(modelName, 1)) ELSE modelName END AS formatted_modelName FROM models;
直接更新原表数据
UPDATE models SET modelName = CONCAT(LEFT(modelName, LENGTH(modelName) - 1), '0', RIGHT(modelName, 1)) WHERE modelName REGEXP '^[A-Za-z][0-9]-';
逻辑说明
- 正则匹配:
REGEXP '^[A-Za-z][0-9]-'精准识别需要处理的字符串(以字母+数字+横杠开头) - 字符串拆分拼接:
LEFT(modelName, LENGTH(modelName)-1)截取除最后一位外的所有内容RIGHT(modelName, 1)提取最后一位字符- 中间插入
0后拼接,完成格式转换
验证示例
| 原始值 | 转换后值 |
|---|---|
| B1-01-A-1 | B1-01-A-01 |
| C1-04-B-2 | C1-04-B-02 |
| G1-02-D-3 | G1-02-D-03 |
| A-01-A-1 | A-01-A-1 |
| A-01-A-2 | A-01-A-2 |
内容的提问来源于stack exchange,提问作者Moses
相关产品推荐
相关产品推荐

