SUBSTRING_INDEX,LENGTH,SUBSTRING的妙用


碰到一个需求:   表中的记录如下格式

id      val
1      222,333
2     333,444,45,5556

需要拆分为如下结构

id      val
1       222
1      333
2      333
2     444
2    45
2     5556

方法如下:

1、给表增加两个临时字段 sub, leng用来存放临时结果

2、用SUBSTRING_INDEX获取每一行记录第一个”,”号之前的字符串,存放在sub字段里

3、记录sub长度,保存在leng里

4、将val字段更新为从leng+2个位置开始 的字符串,

5、将id  sub字段select 并 insert 如另外一个临时表

6、重复 2 3 4 5步骤,知道该表为空

7、将临时表记录读到该表,或者将改变删除,临时表更名为该表名

关于SUBSTRING_INDEX,LENGTH,SUBSTRING的使用说明

1、SUBSTRING_INDEX,函数原型 SUBSTRING_INDEX(str,delim,count) 返回字符串 str 中在第 count 个出现的分隔符 delim 之前的子串。如果 count 是一个正数,返回从最后的(从左边开始计数)分隔符到左边所有字符。如果 count 是负数,返回从最后的(从右边开始计数)分隔符到右边所有字符。

2、LENGTH,函数原型LENGTH(STR),计算字符串的长度

3、SUBSTRING,SUBSTRING(STR , start , length ),截取STR从start位置开始截取字符,截取length长度,或者直至字符串结束,任何一个满足条件见就终止。

sql:

alter table testa add column sub varchar(255) default ”;
alter table testa add column leng smallint(5) default 0;
update testa set sub = substring_index(str,”,”,1);
update testa set leng = length(sub);
update testa set str = substring(str,leng+2);
insert into testb(str,testa_id) select sub,id from testa;
delete from testa where str = ”;

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注