mysql时间操作函数和存储过程

由于业务需要统计一批数据,用到关于mysql的时间操作函数和存储过程,问题已经基本解决,把过程记录下:

1. mysql的语句中不支持直接用循环,循环只能在存储过程中使用;

2. 写为文件时,注意一些隐藏的字符,造成语法错误。本例中注释中包含一些不可见字符,没有找到。

3. 存储过程中尽量多使用分好,分割开语句。本例中 drop一句最初没有写,导致一直有错。

4. 时间函数很强大,可以避免一些工作。http://www.cnblogs.com/ggjucheng/p/3352280.html

5. sql语句的优化很重要,本例中仅解决了问题,但数据量太大,存储过程运行了很久。期待有人能帮忙优化while语句中的优化。

下面贴代码了:

--*将表test.transport20140901表中的数据按照每五分钟一个间隔,统计各个路口的车流数量r
--*@start_time 起始时间 是整点时间的五分钟间隔 如 2014-09-01 00:20:00
--*@end_time  终止时间  是整点的五分钟间隔且大于start_time  如 2014-09-01 01:00:00
--*统计范围包含起始时间,但不包含终止时间

delimiter $
drop procedure transport_status;
create procedure transport_status(start_time datetime,end_time datetime)
begin
        declare mid_start_time datetime;
        declare mid_end_time datetime;
        set mid_start_time=start_time;
        set mid_end_time=date_add(start_time, interval 5 minute);
        lab: while mid_start_time < end_time do
                insert into
                        test.transport_status(stamp,stamp_time,address,car_count)
                        (select
                                FLOOR(UNIX_TIMESTAMP(time)/300) as stmp,
                                date_format(mid_end_time,'%Y-%m-%d %H:%i:%s') as tm,
                                address,
                                count(address) as cnt
                        from
                        test.transport20140901
                        where
                        time > date_add(mid_start_time, interval -1 second)
                        and time < mid_end_time
                        group by address);
                set mid_start_time=date_add(mid_start_time, interval 5 minute);
                set mid_end_time=date_add(mid_end_time, interval 5 minute);
        end while lab;
end $
delimiter ;

call transport_status("2014-09-01 00:00:00","2014-09-2 00:00:00");
时间: 2024-10-08 18:08:26

mysql时间操作函数和存储过程的相关文章

mysql创建自定义函数与存储过程

mysql创建自定义函数与存储过程 一 创建自定义函数 在使用mysql的过程中,mysql自带的函数可能不能完成我们的业务需求,这时就需要自定义函数,例如笔者在开发过程中遇到下面这个问题 mysql表结构如下 DROP TABLE IF EXISTS `test`; CREATE TABLE `test` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `pic` varchar(50) NOT NULL, `hashcode` varchar

mysql 时间日期函数类型和使用

-- mysql 时间日期函数类型和使用-- 1.DAY().MONTH().YEAR()--返回指定日期的天数.月数.年数:select day(CURDATE()) as '日' from dual; select month(CURDATE()) as '月' from dual; select year(CURDATE()) as '年' from dual; -- 2 .NOW().current_timestamp().localtime(),localtimestamp() 取的是

MySQL之自定义函数与存储过程

MySQL数据库常用函数与自定义函数 1 SELECT ABS(-8);#绝对值 2 SELECT MOD(10,9); #取模 3 SELECT FLOOR(12.99); #地板 4 SELECT CEILING(10.01);#天花板 5 SELECT ROUND(12.99);#随机数,看第一个小数点数 6 SELECT CONCAT('i','love','java');#拼接 7 SELECT * FROM t_user t WHERE t.`uname` LIKE CONCAT('

MYSQL常用操作函数的封装

1.mysql常用函数封装文件:mysql.func.php <?php /** * 连接MYSQL函数 * @param string $host * @param string $username * @param string $password * @param string $dbName * @param string $charset * @return resource */ function connect($host,$username,$password,$dbName,$

mysql 时间转换函数

UNIX_TIMESTAMP    "2009-09-15 00:00:00"转化为列为长整型的函数 select unix_timestamp("2013-03-15 00:00:00")*1000, 这里要注意,mysql数据库中的长整型,比java中的长整型少了秒后面的毫秒数,所以要乘以1000,这样只有几毫秒之差 FROM_UNIXTIME    "1252999488000"(java中的long型数据)转化为日期 select fro

MYSQL 时间日期函数的用法

mysql日期时间函数比较多,总结一些比较重要的函数,now(),curdate(),curtime(),date_add(),datediff(),date_format(),下面详细介绍其用法和输出的结果. 1,now() select now() 输出 2018-10-1 12:00:00 2,curdate() select curdate() 输出 2018-10-1 3,curtime() select curtime() 输出 12:00:00 4, date_add() sele

mysql时间相加函数DATE_ADD()

mysql中的DATE_ADD()函数 1.定义:函数向日期添加指定的时间间隔. 2.语法:DATE_ADD(date,INTERVAL expr type) date 参数是合法的日期表达式.expr 参数是您希望添加的时间间隔. type 参数可以是下列值: MICROSECONDSECONDMINUTEHOURDAYWEEKMONTHQUARTERYEARSECOND_MICROSECONDMINUTE_MICROSECONDMINUTE_SECONDHOUR_MICROSECONDHOU

mysql 时间操作

mysql 获取当前时间为select now()运行结果: 2017-04-15 05:24:05 mysql 获取当前时间戳为select unix_timestamp(now()) 运行结果:unix_timestamp(now()) 1556555555 SELECT FROM_UNIXTIME(1234567890); SELECT FROM_UNIXTIME(1234567890, '%Y-%m-%d %H:%i:%S') 原文地址:https://www.cnblogs.com/w

C++中对Mysql的操作函数可以参考以下blog中的内容

http://www.cnblogs.com/lovebread/archive/2009/11/24/1609936.html