MySQL如何在INSERT语句中实现字符串每隔4位插入分隔符
不同数据库下的实现方案
你要求必须在INSERT语句内完成格式化,且输入字符串长度固定为17,直接按位置截取拼接是最简单高效的方案,输出长度刚好为21,完全适配varchar(21)的字段要求:
- MySQL 实现
INSERT INTO `table` (field) VALUES ( CONCAT( SUBSTRING('AAAAAAAAAAAAAAAAA', 1, 4), '-', SUBSTRING('AAAAAAAAAAAAAAAAA', 5, 4), '-', SUBSTRING('AAAAAAAAAAAAAAAAA', 9, 4), '-', SUBSTRING('AAAAAAAAAAAAAAAAA', 13, 4), '-', SUBSTRING('AAAAAAAAAAAAAAAAA', 17, 1) ) );
- PostgreSQL 实现
INSERT INTO "table" (field) VALUES ( SUBSTRING('AAAAAAAAAAAAAAAAA' FROM 1 FOR 4) || '-' || SUBSTRING('AAAAAAAAAAAAAAAAA' FROM 5 FOR 4) || '-' || SUBSTRING('AAAAAAAAAAAAAAAAA' FROM 9 FOR 4) || '-' || SUBSTRING('AAAAAAAAAAAAAAAAA' FROM 13 FOR 4) || '-' || SUBSTRING('AAAAAAAAAAAAAAAAA' FROM 17 FOR 1) );
- SQL Server 实现
INSERT INTO [table] (field) VALUES ( SUBSTRING('AAAAAAAAAAAAAAAAA', 1, 4) + '-' + SUBSTRING('AAAAAAAAAAAAAAAAA', 5, 4) + '-' + SUBSTRING('AAAAAAAAAAAAAAAAA', 9, 4) + '-' + SUBSTRING('AAAAAAAAAAAAAAAAA', 13, 4) + '-' + SUBSTRING('AAAAAAAAAAAAAAAAA', 17, 1) );
- Oracle 实现
INSERT INTO "TABLE" (field) VALUES ( SUBSTR('AAAAAAAAAAAAAAAAA', 1, 4) || '-' || SUBSTR('AAAAAAAAAAAAAAAAA', 5, 4) || '-' || SUBSTR('AAAAAAAAAAAAAAAAA', 9, 4) || '-' || SUBSTR('AAAAAAAAAAAAAAAAA', 13, 4) || '-' || SUBSTR('AAAAAAAAAAAAAAAAA', 17, 1) );
如果你后续需要适配非固定长度的字符串,也可以用正则替换简化写法,比如MySQL中可以用
REGEXP_REPLACE(你的字符串, '(.{4})', '\\1-'),最后再用TRIM(TRAILING '-' FROM 处理后的字符串)去掉末尾多余的分隔符即可。
内容的提问来源于stack exchange,提问作者Welcho
相关产品推荐
相关产品推荐

