将具有csv值的mysql col拆分为相应的字段

时间:2014-10-22 02:22:21

标签: mysql csv split

我有一个名为"匹配"

的mysql表

匹配中有5个字段(4个空白列和1个带CSV数据的列) 负载,用户名,username_clean,USER_ID,member_id

在加载字段中有许多行以逗号分隔值(CSV) load列中的值采用以下格式:username,username_clean,user_id,member_id 第一列"加载"

中的4个csv值

问题:如何在加载中拆分4个值并将它们放在各自的列中?

请帮忙!先感谢您。 例。我想要以下

|Sara,sara,60,9|

成为:               萨拉|          萨拉|          60 |          9 |                < - 4cols而不是1

2 个答案:

答案 0 :(得分:1)

UPDATE `match` SET
    username=LEFT(`load`,LOCATE(',',`load`)-1),
    `load`=SUBSTR(`load`,LOCATE(',',`load`)+1)
;
UPDATE `match` SET
    username_clean=LEFT(`load`,LOCATE(',',`load`)-1),
    `load`=SUBSTR(`load`,LOCATE(',',`load`)+1)
;
UPDATE `match` SET
    user_id=LEFT(`load`,LOCATE(',',`load`)-1),
    member_id=SUBSTR(`load`,LOCATE(',',`load`)+1)
;

UPDATE `match` SET username=LEFT(`load`,LOCATE(',',`load`)-1);
UPDATE `match` SET `load`=SUBSTR(`load`,LOCATE(',',`load`)+1);
UPDATE `match` SET username_clean=LEFT(`load`,LOCATE(',',`load`)-1);
UPDATE `match` SET `load`=SUBSTR(`load`,LOCATE(',',`load`)+1);
UPDATE `match` SET user_id=LEFT(`load`,LOCATE(',',`load`)-1);
UPDATE `match` SET member_id=SUBSTR(`load`,LOCATE(',',`load`)+1);

由于我的第一次尝试添加了一个逗号,只需运行此

即可
UPDATE matchindex SET
    username = REPLACE(username,',',''),
    username_clean = REPLACE(username_clean,',','')
;

答案 1 :(得分:1)

试试这个:
定义一个函数strSplit:

CREATE FUNCTION strSplit(x varchar(255), delim varchar(12), pos int) returns varchar(255)
return replace(substring(substring_index(x, delim, pos), length(substring_index(x, delim, pos - 1)) + 1), delim, '');  

使用此查询:

 update match set username=strSplit(load, ',', 1),username_clean=strSplit(load, ',', 2),user_id=strSplit(load, ',', 3),member_id=strSplit(load, ',', 4);