MySQL 为 INSERT 拆分字符串

MySQL split string for INSERT

我有一个字符串(长 17),如“AAAAAAAAAAAAAAAAAA”,我需要将其写入格式为“AAAA-AAAA-AAAA-AAAA-A”的 varchar(21) 字段中。

出于某种原因,它必须在 INSERT 语句中格式化为:

INSERT INTO table (field) VALUES (  FORMATED("AAAAAAAAAAAAAAAAA") )

我找不到每 4 个字符插入分隔符的方法,如果您知道如何操作,我会感谢您的帮助。

韦尔乔

您可以创建自定义函数 formatted(),如下所示:

create function formatted(n varchar(17)) 
returns varchar(21)
begin
return concat(
  substring(n, 1, 4),
  '-',
  substring(n, 5, 4),
  '-',
  substring(n, 9, 4),
  '-',
  substring(n, 13, 4),
  '-',
  substring(n, 17, 1)
  );
end;
//

然后,就是在插入行的时候调用它了。例如:

insert into t (f) values (formatted('12345678901234567'));

结果:

 f                     
 --------------------- 
 1234-5678-9012-3456-7 

请参阅 db<>fiddle 中的 运行 示例。

注意:当然,如果参数短于或长于 17 个字符,则您需要向函数添加基本验证。这很容易添加。