查询2017年7月份前十天的数据,使用do..while循环语句
DELIMITER $$
CREATE DEFINER='root'@'%' PROCEDURE pro_selectday2(in bTime varchar(20),in eTime varchar(20))
BEGIN
WHILE STR_TO_DATE(bTime,'%Y-%m-%d') <= STR_TO_DATE('2017-07-10','%Y-%m-%d') DO
– SELECT CONCAT(eTime);
SELECT c.eventKey,COUNT(m.openid),DATE_FORMAT(m.create_time,'%Y-%m-%d') as date
from wp_members m
LEFT JOIN wp_member_comfrom c on c.openid = m.openid
where DATE_FORMAT(m.create_time,'%Y-%m-%d')>=STR_TO_DATE(bTime,'%Y-%m-%d') and DATE_FORMAT(m.create_time,'%Y-%m-%d')
AND m.id not in (SELECT DISTINCT s.member_id
FROM wp_statistics_data s
WHERE DATE_FORMAT(s.date,'%Y-%m-%d')>=STR_TO_DATE(bTime,'%Y-%m-%d') and DATE_FORMAT(s.date,'%Y-%m-%d')
GROUP BY c.event_key;
– SELECT CONCAT(bTime);
SET bTime=eTime;
SET eTime=DATE_FORMAT(DATE_ADD(STR_TO_DATE(eTime,'%Y-%m-%d'),INTERVAL 1 DAY),'%Y-%m-%d') ;
end WHILE;
END $$
DELIMITER ;
对上面的实例进行解释:
DELIMITER 是修改MySQL的分隔符
MySQL默认以”;“为分隔符,如果没有声明分割符,则编译器会把存储过程当成SQL语句进行处理,因此编译过程会报错,所以要事先用"DELIMITER $$“声明当前段分隔符,让编译器把两个”$$“之间的内容当做存储过程的代码,不会执行这些代码;“DELIMITER ;“的意为把分隔符还原。
这个存储过程是使用的in类型参数,将参数定义成varchar()型的,所以在使用该参数进行日期的比较时需要将字符串型转换成date型
字符串转换成date型使用的是STR_TO_DATE(str,format)方法
date日期之间的比较使用DATE_FORMAT(date,format)方法。
执行存储过程:CALL pro_selectday2('2017-07-01','2017-07-02');
结果如下:

原文链接: https://onlyou.blog.csdn.net//article/details/80620225