求 mysql中 速度最快的分割字符串方法??

doney_dongxiang 2009-10-20 03:42:21
加精
今有 一万个手机号码已 " ;" 分割符连接的字符串,需要在存储过程中,需要将所有号码添加到另外一个表中,并且号码需要分开(既每个手机号码为一行)。有没有快捷的方法?

下面是目前采用的方法:

set t_MCODE=ltrim(t_code); /* t_code 为号码字符串 */
set t_MCODE=rtrim(t_MCODE);
set t_i=POSITION(';' in t_MCODE);
WHILE t_i >=1 do
set str=left(t_MCODE,t_i-1);
set str=ltrim(str) ;
set str=rtrim(str);
insert test(names) values(str);
set t_MCODE=substring(t_MCODE,t_i+1,length(t_MCODE)-t_i);
set t_i=POSITION(';' in t_MCODE);
end WHILE ;/*把号码插入表*/
insert test(names) values(t_MCODE); /*将最后剩余的号码放入临时表*/



一万条需要 20s 很慢,如果大量,用户并发操作就更加慢了
...全文
7740 148 打赏 收藏 转发到动态 举报
写回复
用AI写文章
148 条回复
切换为时间正序
请发表友善的回复…
发表回复
piaolankeke 2012-03-12
  • 打赏
  • 举报
回复
mysql 可以直接导入的
-无-为- 2009-12-14
  • 打赏
  • 举报
回复
学习了
xucan2087 2009-12-14
  • 打赏
  • 举报
回复
mysql很强大啊。。。。
gxg353 2009-11-04
  • 打赏
  • 举报
回复
太经典的思路了
ljf_ljf 2009-10-30
  • 打赏
  • 举报
回复
这样操作为什么要数据库去完成呢?
如果用一个程序做会简单很多,感觉有点简单问题复杂化了。
wydycrtd 2009-10-29
  • 打赏
  • 举报
回复
很强大吗!严重支持
erxwu 2009-10-29
  • 打赏
  • 举报
回复
不错的思路
handsomemank 2009-10-27
  • 打赏
  • 举报
回复
[Quote=引用 95 楼 mlsml 的回复:]
谁能解答下这个
set @a = concat(concat("insert into x values('",replace(@b,';',"'),('")),"
')");
标点符号都不匹配却可以运行的问题~~~
[/Quote]
concat 是一个字符串连接函数 可将该字符串拆开如下
concat(
concat(
"insert into x values('",
replace(@b,';',"'),
('")
)

,
"')"
)
yuexiae 2009-10-27
  • 打赏
  • 举报
回复
学习了 看看
wolcott2387 2009-10-27
  • 打赏
  • 举报
回复
学习了
xiaozei523 2009-10-27
  • 打赏
  • 举报
回复
学习了
A642803063 2009-10-27
  • 打赏
  • 举报
回复
灌水的
batiraul 2009-10-27
  • 打赏
  • 举报
回复
白进来学习了,都没有答到点子上。

条数太多的话,不如靠java、c#之类的前台程序去拆解,而不是在sql中操作,烦琐不说,效果也差,还耗费数据库资源。
M1234 2009-10-26
  • 打赏
  • 举报
回复
简单测试了一下,5#方法应该在字符串大的时候优势较为明显,大概快15-25%

相对我原有代码

_LOOP: LOOP
SET l_EndPos = LOCATE(l_Delimiter, l_Input, l_EndPos + 1);

IF l_EndPos = 0 THEN
LEAVE _LOOP;
END IF;

REPLACE INTO TempTable ( `Value` )
VALUES ( SUBSTRING(l_Input FROM l_StartPos FOR l_EndPos - l_StartPos) );

SET l_StartPos = l_EndPos + LENGTH(l_Delimiter);
SET l_EndPos = l_EndPos + LENGTH(l_Delimiter);
END LOOP _LOOP;
chensiping 2009-10-26
  • 打赏
  • 举报
回复
直接用mysql的命令
以 mysql csv import 为关键词搜
diguoguo 2009-10-26
  • 打赏
  • 举报
回复
hehe ,学习了
铁匠梁 2009-10-25
  • 打赏
  • 举报
回复
路过ing……
is08sysugame 2009-10-24
  • 打赏
  • 举报
回复
非常好
zerothink_cys 2009-10-24
  • 打赏
  • 举报
回复
好好好,不错不错
playsand 2009-10-24
  • 打赏
  • 举报
回复
我也是来围观学习的

加载更多回复(122)

56,675

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧