文本版|topic 高级搜索
   名人堂 帮助 论坛制度 意见反馈 | 首页 博客 周新贴 专题 求职 读书
RSS 底部
 
社区导航: 专家门诊   网络技术   操作系统   数据库   程序设计   系统应用   考试认证   CIO及信息化   站长交流   综合交流   下载基地  51CTO产品服务 设为首页 | 收藏本站
51CTO技术论坛» MySQL & PostgreSQL & Sybase » 在MYSQL中实现分割字符串的函数       [ 打印]  [ 订阅]  [ 收藏]  [ 推荐给朋友]   [ 本帖文本页]

论坛跳转:
     
标题: [原创] 在MYSQL中实现分割字符串的函数  ( 查看:353  回复:1 )   
 
david_yeung
新新人类  点击可查看详细



十二生肖之猴   行业勋章   技术勋章   诚信兄弟  
帖子 33
精华 0
无忧币 1693
积分 37
阅读权限 20
注册日期 2008-6-5
最后登录 2008-10-3 离线

[查看资料]  [发短消息]  [Blog
[个人主页]    QQ       
发表于:2008-6-21 16:55   标题:在MYSQL中实现分割字符串的函数
上一帖 |
比如现在有一字符串:1,2,44,5,666,29232
要把它按照逗号分割成:
1
2
44
5
666
29232
而且还要求它的总数。这个我以前写过。不过今天规范一下。

1、具体函数

SQL code

DELIMITER $$

CREATE DEFINER=`root`@`%` FUNCTION `func_get_split_string_total`(
f_string varchar(1000),f_delimiter varchar(5)
) RETURNS int(11)
BEGIN
  -- Get the total number of given string.
  return 1+(length(f_string) - length(replace(f_string,f_delimiter,'')));
END$$

DELIMITER ;


SQL code

DELIMITER $$


CREATE DEFINER=`root`@`%` FUNCTION `func_get_split_string`(
f_string varchar(1000),f_delimiter varchar(5),f_order int) RETURNS varchar(255) CHARSET utf8
BEGIN
  -- Get the separated number of given string.
  declare result varchar(255) default '';
  set result = reverse(substring_index(reverse(substring_index(f_string,f_delimiter,f_order)),f_delimiter,1));
  return result;
END$$

DELIMITER ;
测试的存储过程:
DELIMITER $$

CREATE PROCEDURE `sp_print_result`(
IN f_string varchar(1000),IN f_delimiter varchar(5)
)
BEGIN
  -- Get the separated string.
  declare cnt int default 0;
  declare i int default 0;
  set cnt = func_get_split_string_total(f_string,f_delimiter);
  drop table if exists tmp_print;
  create temporary table tmp_print (num int not null);
  while i < cnt
  do
    set i = i + 1;
    insert into tmp_print(num) values (func_get_split_string(f_string,f_delimiter,i));
  end while;
  select * from tmp_print;
  
END$$

DELIMITER ;

2、来做一下测试
   mysql> call sp_print_result('1,2,44,5,666,29232',',');
+-------+
| num   |
+-------+
|     1 |
|     2 |
|    44 |
|     5 |
|   666 |
| 29232 |
+-------+
6 rows in set (0.01 sec)

Query OK, 0 rows affected (0.01 sec)



【每日必读】头条新闻大扫荡
2008-6-21 16:551楼
[ 顶部 ]
 
david_yeung
新新人类  点击可查看详细



十二生肖之猴   行业勋章   技术勋章   诚信兄弟  
帖子 33
精华 0
无忧币 1693
积分 37
阅读权限 20
注册日期 2008-6-5
最后登录 2008-10-3 离线

[查看资料]  [发短消息]  [Blog
[个人主页]    QQ       
发表于:2008-6-21 16:56 
http://blog.chinaunix.net/u/29134/showart_1002486.html

博客地址。
大家去我博客上提意见。



【每日必读】头条新闻大扫荡
2008-6-21 16:562楼
[ 顶部 ]
     
论坛跳转:  

| | |

| | |

标记已读 · 删除论坛Cookies · 文本版 · WAP
 
| 诚征版主 | 版主堂 | 意见建议 | 大史记 | 论坛地图
Copyright©2005-2008 51CTO.COM  Powered by Discuz!
本论坛言论纯属发布者个人意见,不代表51CTO网站立场!如有疑义,请与管理员联系。
京ICP备05051492号