Mysql中的字符串拆分方法 (类似java中split()与PaAdmin库中的split_part()函数)
2018-03-05 17:29
676 查看
【原理】:
//f
SELECT SUBSTRING_INDEX('a,b,c,d,e,f',',',-1) ; -- f != 'a,b,c,d,e,f'
//e
SELECT SUBSTRING_INDEX('a,b,c,d,e,f',',',-2) ; -- e,f != 'a,b,c,d,e,f'
SELECT SUBSTRING_INDEX('e,f',',',1) ;
//d
SELECT SUBSTRING_INDEX('a,b,c,d,e,f',',',-3) ; -- d,e,f != 'a,b,c,d,e,f'
SELECT SUBSTRING_INDEX('d,e,f',',',1) ;
//c
SELECT SUBSTRING_INDEX('a,b,c,d,e,f',',',-4) ; -- c,d,e,f != 'a,b,c,d,e,f'
SELECT SUBSTRING_INDEX('c,d,e,f',',',1) ;
//b
SELECT SUBSTRING_INDEX('a,b,c,d,e,f',',',-5) ; -- b,c,d,e,f != 'a,b,c,d,e,f'
SELECT SUBSTRING_INDEX('b,c,d,e,f',',',1) ;
//a
SELECT SUBSTRING_INDEX('a,b,c,d,e,f',',',-6) ; -- a,b,c,d,e,f != 'a,b,c,d,e,f' OK
SELECT SUBSTRING_INDEX('a,b,c,d,e,f',',',1) ;
【实例】:
//变量声明 pnames = 'a,b,c,d,e,f'
DECLARE _z_end int DEFAULT 0;
DECLARE _z_num int DEFAULT -1;
DECLARE _z_str varchar(50);
set _name:= SUBSTRING_INDEX(pnames,',',1) ; -- _name 拆分后的值
while(_z_end <> -1) do
-- 字符拆分
set _z_str := SUBSTRING_INDEX(pnames,',',_z_num);
set _z_num = -1 + _z_num;
if(_z_str == pnames) then
_z_end := -1;
end if;
set _name:= SUBSTRING_INDEX(_z_str,',',1) ;
end while;
【运用】:
CREATE PROCEDURE `p_test`(IN `pnames` varchar(50))
BEGIN
-- pnames = 'a,b,c,d,e,f'
DECLARE _z_end int DEFAULT 0;
DECLARE _z_num int DEFAULT -1;
DECLARE _z_str varchar(50);
DECLARE _name varchar(50);
-- 创建临时表
DROP TABLE IF EXISTS p_test_msg;
create TEMPORARY table p_test_msg(
code varchar(50),
msg varchar(50)
);
set _name:= SUBSTRING_INDEX(pnames,',',1) ; -- _name 拆分后的值
while(_z_end <> -1) do
-- 插入临时表
insert into p_test_msg(code,msg) values(_z_num,_name);
-- 字符拆分
set _z_str := SUBSTRING_INDEX(pnames,',',_z_num);
set _z_num = -1 + _z_num;
if(_z_str = pnames) then
set _z_end := -1;
end if;
set _name:= SUBSTRING_INDEX(_z_str,',',1) ;
end while;
SELECT * FROM p_test_msg;
END;
执行过程: CALL p_test('a,b,c,d,e,f');
结果:
code msg
-1 a
-2 f
-3 e
-4 d
-5 c
-6 b
//f
SELECT SUBSTRING_INDEX('a,b,c,d,e,f',',',-1) ; -- f != 'a,b,c,d,e,f'
//e
SELECT SUBSTRING_INDEX('a,b,c,d,e,f',',',-2) ; -- e,f != 'a,b,c,d,e,f'
SELECT SUBSTRING_INDEX('e,f',',',1) ;
//d
SELECT SUBSTRING_INDEX('a,b,c,d,e,f',',',-3) ; -- d,e,f != 'a,b,c,d,e,f'
SELECT SUBSTRING_INDEX('d,e,f',',',1) ;
//c
SELECT SUBSTRING_INDEX('a,b,c,d,e,f',',',-4) ; -- c,d,e,f != 'a,b,c,d,e,f'
SELECT SUBSTRING_INDEX('c,d,e,f',',',1) ;
//b
SELECT SUBSTRING_INDEX('a,b,c,d,e,f',',',-5) ; -- b,c,d,e,f != 'a,b,c,d,e,f'
SELECT SUBSTRING_INDEX('b,c,d,e,f',',',1) ;
//a
SELECT SUBSTRING_INDEX('a,b,c,d,e,f',',',-6) ; -- a,b,c,d,e,f != 'a,b,c,d,e,f' OK
SELECT SUBSTRING_INDEX('a,b,c,d,e,f',',',1) ;
【实例】:
//变量声明 pnames = 'a,b,c,d,e,f'
DECLARE _z_end int DEFAULT 0;
DECLARE _z_num int DEFAULT -1;
DECLARE _z_str varchar(50);
set _name:= SUBSTRING_INDEX(pnames,',',1) ; -- _name 拆分后的值
while(_z_end <> -1) do
-- 字符拆分
set _z_str := SUBSTRING_INDEX(pnames,',',_z_num);
set _z_num = -1 + _z_num;
if(_z_str == pnames) then
_z_end := -1;
end if;
set _name:= SUBSTRING_INDEX(_z_str,',',1) ;
end while;
【运用】:
CREATE PROCEDURE `p_test`(IN `pnames` varchar(50))
BEGIN
-- pnames = 'a,b,c,d,e,f'
DECLARE _z_end int DEFAULT 0;
DECLARE _z_num int DEFAULT -1;
DECLARE _z_str varchar(50);
DECLARE _name varchar(50);
-- 创建临时表
DROP TABLE IF EXISTS p_test_msg;
create TEMPORARY table p_test_msg(
code varchar(50),
msg varchar(50)
);
set _name:= SUBSTRING_INDEX(pnames,',',1) ; -- _name 拆分后的值
while(_z_end <> -1) do
-- 插入临时表
insert into p_test_msg(code,msg) values(_z_num,_name);
-- 字符拆分
set _z_str := SUBSTRING_INDEX(pnames,',',_z_num);
set _z_num = -1 + _z_num;
if(_z_str = pnames) then
set _z_end := -1;
end if;
set _name:= SUBSTRING_INDEX(_z_str,',',1) ;
end while;
SELECT * FROM p_test_msg;
END;
执行过程: CALL p_test('a,b,c,d,e,f');
结果:
code msg
-1 a
-2 f
-3 e
-4 d
-5 c
-6 b
相关文章推荐
- Java split拆分使用竖线为分隔符的字符串方法
- MySQL里实现类似SPLIT的分割字符串的函数
- mysql截取函数常用方法 即mysql 字符串 截取-- - 最后带上java字符串截取规则比较
- Java--split拆分使用竖线为分隔符的字符串方法
- JAVA 中split的用法将字符串变成数组,利用SPLIT方法写的JAVA里的字符串替换函数(转)
- java 中用split分割字符串,最后的空格等不被拆分的方法
- JAVA Split方法,拆分字符串后,去除返回的空值
- Java split拆分使用竖线为分隔符的字符串方法
- MySQL字符串按分隔符拆分函数str_split
- plsql 类似Java中的split方法 字符串分割
- MySQL里实现类似SPLIT的分割字符串的函数
- MySQL里实现类似SPLIT的分割字符串的函数
- MySQL里实现类似SPLIT的分割字符串的函数
- 【字符串操作之】将一个字符串拆分成数组→→split方法
- sqlserver字符串拆分(split)方法汇总
- C#字符分隔方法Regex.Split(类似Java中的StringTokenizer)
- Java中用split()函数进行分割字符串
- 【Java学习笔记】使用split()方法分割字符串
- SqlServer:根据指定分隔符,把传入字符串分隔处理后,返回数据表,函数功能类似.NET的string.Split()