mysql 利用sql解析数组

1、创建存储过程

delimiter //
CREATE PROCEDURE `substring`(IN `array` varchar(255),IN `num` int(10),OUT `string` varchar(255))
BEGIN
-- 裁剪数组为想要的元素在第一位(num 从 0 开始为第一个元素)
	set @startCount = -(length(`array`) - length(REPLACE(`array`, ',', '')) + 1);
	SET @startList = SUBSTRING_INDEX( `array`, ',', @startCount + `num` );
-- 获取该下标下的字符串
	set `string` = trim(SUBSTRING_INDEX( @startList, ',', '1' ));
END //

2、测试存储过程

call `substring`('2022-04-21, 2022-04-22',1,@s);
select @s;

3、具体操作 (函数)

DECLARE i INT DEFAULT 0;
-- 分隔符数=总元素个数-1
SET @total =(
SELECT
	length( leave_start_date ) - length(
	REPLACE ( leave_start_date, ',', '' )) 
FROM
	test 
);
-- 数组
SET @startArray =(
		SELECT REPLACE
			( REPLACE ( leave_start_date, '[', '' ), ']', '' ) 
		FROM
			test 
		);

WHILE
	i <= @total DO
	
	-- 裁剪出具体元素,类似 java array.get(int index) 此存储过程 index是从 0 开始,序号 0 为第一个元素 方法
	call `substring`(@startArray ,i,@s);

	自己的业务逻辑	

	SET i = i + 1;
	
END WHILE;
批量sql解析数组, SQL终结符解析 前段时间在写一个服务端程序的时候,需要用到mysql. 客户端连接服务端执行sql分好几种情况, { 查询SQL, 执行SQL, 执行SQL事务, 批量执行支持, 查询执行混合 } ... 其中的"批量执行"就有点让我头疼, 玩过sql的都知道, 批量执行一般以";" 终结符算一条sql语句, 以此分割. 难点就是把批量的sql语句, 分割为单条, 一个一个的执行.估计有的易友可能想到了"分割文本, 发送文本数组" 首先"发送文本数组", 我不喜欢,有时候显得麻烦. 其次"分割文本", 你可能会遇到这样以下这样的情况, 也就是sql字符串中出现了";", 你能怎么办? 你也很绝望对吧? INSERT INTO `User`(name) values('剑''齿;虎');SELECT LAST_INSERT_ID(); 以上问题还有, 字符串中包含单引号就需要用两个单引号表示.... 实在不想屈服于前面两种蛋疼的方式,试着自己封装子程序解析, 忽略字符串什么的. 有时候脑子是个好东西,可惜我好像没有似的... 感觉设计起来还挺复杂麻烦的,我没学过什么脚本设计,编译设计的. 于是前段时间论坛有几个帖子被顶起来了,一个叫"无间酱"的大佬制作了好几个练手的脚本语言设计, 我灵机一动...脚本也会遇到这样的问题, 就把源码中的解析终结符部分给抠出来了...总算说到重点了. 刚开始还不能直接用, 改了改还算可以了. INSERT INTO User (name,pwd) values('剑齿虎;哇', 'aabb');--注释A:插入语句-- SELECT * FROM User; /*注释B:查询*/ UPDATE User SET pwd='ac''c' WHERE uid=1 结果: 数组:3{ “INSERT INTO User (name,pwd) values('剑齿虎;哇', 'aabb');”, “--注释A:插入语句-- SELECT * FROM User;”, “/*注释B:查询*/ UPDATE User SET pwd='ac''c' WHERE uid=1” } 感觉瞬间正规了许多, 不用去使用那些"偏方", 导致出现各种各样的杯具
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值