mysql存储过程时间_mysql时间操作函数和存储过程
因?yàn)闃I(yè)務(wù)須要統(tǒng)計(jì)一批數(shù)據(jù)。用到關(guān)于mysql的時(shí)間操作函數(shù)和存儲(chǔ)過(guò)程,問(wèn)題已經(jīng)基本解決。把過(guò)程記錄下:
1. mysql的語(yǔ)句中不支持直接用循環(huán)。循環(huán)僅僅能在存儲(chǔ)過(guò)程中使用。
2. 寫為文件時(shí),注意一些隱藏的字符,造成語(yǔ)法錯(cuò)誤。本例中凝視中包括一些不可見字符。沒有找到。
3. 存儲(chǔ)過(guò)程中盡量多使用分好,切割開語(yǔ)句。
本例中 drop一句最初沒有寫。導(dǎo)致一直有錯(cuò)。
4. 時(shí)間函數(shù)非常強(qiáng)大,能夠避免一些工作。http://www.cnblogs.com/ggjucheng/p/3352280.html
5. sql語(yǔ)句的優(yōu)化非常重要。本例中僅攻克了問(wèn)題,但數(shù)據(jù)量太大。存儲(chǔ)過(guò)程執(zhí)行了非常久。期待有人能幫忙優(yōu)化while語(yǔ)句中的優(yōu)化。
以下貼代碼了:
--*將表test.transport20140901表中的數(shù)據(jù)依照每五分鐘一個(gè)間隔,統(tǒng)計(jì)各個(gè)路口的車流數(shù)量r
--*@start_time 起始時(shí)間 是整點(diǎn)時(shí)間的五分鐘間隔 如 2014-09-01 00:20:00
--*@end_time 終止時(shí)間 是整點(diǎn)的五分鐘間隔且大于start_time 如 2014-09-01 01:00:00
--*統(tǒng)計(jì)范圍包括起始時(shí)間,但不包括終止時(shí)間
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");
總結(jié)
以上是生活随笔為你收集整理的mysql存储过程时间_mysql时间操作函数和存储过程的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: apache arm 交叉编译_arm
- 下一篇: mysql中text格式化_mysql中