我正在将旧数据集转换为新结构化的数据库。目前他们有以下格式的数据:
[quantity int]~[var1 string]|[var2 string optional]|[var3 string optional];(etc);
[quantity]~[var1]|[var2]|[var3]
其中各种模式首先用分号分隔,然后用波形符分隔,最后用现有数据库中同一字段(无括号)内的竖线字符分隔。例如:
3~S|Red|Top;1~S|Blue|Top; ... etc ... ;20~XL|Green|Left
我想在每个记录中获取该字符串并执行以下操作:
- 根据每个分号分隔在现有表中创建新记录
- 再次按波浪号拆分每个标记,将第一个部分放入一个字段,将第二个部分放入同一记录中的单独字段(我不关心按管道拆分)
我不知道这是否可能,但我希望它是可能的。我也希望只需要执行一次,因为新系统将自动创建所有这些垃圾。我的 sproc-fu 在 MySQL 中非常糟糕,因此非常感谢任何帮助。
非常感谢!
最佳答案
这在 SQL 中似乎是一件相当恶心的事情,但这里有一个概念验证脚本。
如果输出对您来说是正确的,请将 SELECT 替换为适当的 INSERT 语句,它应该会得到您想要的结果。
delimiter ;;
drop procedure if exists load_crazy_stuff;;
create procedure load_crazy_stuff(in s longtext)
begin
declare pos int;
declare record longtext;
declare leftpart int;
declare rightpart longtext;
set s = concat(s,';');
while length(s)>0 DO
set pos = instr(s,';');
set record = left(s,pos-1);
set s = substr(s,pos+1);
set pos = instr(record,'~');
set leftpart = left(record,pos-1);
set rightpart = substr(record,pos+1);
select leftpart, rightpart;
end while;
end;;
call load_crazy_stuff('3~S|Red|Top;1~S|Blue|Top;20~XL|Green|Left');;
关于mysql - 在MySQL中获取多分隔字符串并转换为多条记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4475894/