如何在MySQL中将账号101000002035转换为101-000002-03-5格式?
MySQL账号格式转换:101000002035 → 101-000002-03-5
当然可以实现这个格式转换!在MySQL里,我们可以通过字符串截取+拼接的方式轻松搞定,下面分两种场景给你具体方案:
1. 查询时临时转换格式(不修改原数据)
如果只是想在查询结果中看到格式化后的账号,不需要改动表中的原始数据,可以用SUBSTRING截取各段,再用CONCAT拼接分隔符:
SELECT CONCAT( SUBSTRING(account_col, 1, 3), '-', -- 截取前3位:101 SUBSTRING(account_col, 4, 6), '-', -- 截取第4到第9位(共6位):000002 SUBSTRING(account_col, 10, 2), '-', -- 截取第10到第11位(共2位):03 SUBSTRING(account_col, 12, 1) -- 截取最后1位:5 ) AS formatted_account FROM your_table;
关键注意点:
- 确保你的账号字段是字符串类型(比如
VARCHAR),如果是数值类型(INT/BIGINT),需要先转成字符串,否则前导零会丢失:SELECT CONCAT( SUBSTRING(CAST(account_col AS CHAR), 1, 3), '-', SUBSTRING(CAST(account_col AS CHAR), 4, 6), '-', SUBSTRING(CAST(account_col AS CHAR), 10, 2), '-', SUBSTRING(CAST(account_col AS CHAR), 12, 1) ) AS formatted_account FROM your_table;
2. 直接更新表中的账号格式(修改原数据)
如果需要永久修改表中的账号格式,用UPDATE语句即可,但操作前一定要备份数据,或者先加WHERE条件测试避免误改全表:
UPDATE your_table SET account_col = CONCAT( SUBSTRING(account_col, 1, 3), '-', SUBSTRING(account_col, 4, 6), '-', SUBSTRING(account_col, 10, 2), '-', SUBSTRING(account_col, 12, 1) );
同样,如果字段是数值类型,记得先转字符串:
UPDATE your_table SET account_col = CONCAT( SUBSTRING(CAST(account_col AS CHAR), 1, 3), '-', SUBSTRING(CAST(account_col AS CHAR), 4, 6), '-', SUBSTRING(CAST(account_col AS CHAR), 10, 2), '-', SUBSTRING(CAST(account_col AS CHAR), 12, 1) );
内容的提问来源于stack exchange,提问作者Min Min
相关产品推荐
相关产品推荐

