mysql時間操作函式和儲存過程

2021-07-03 01:24:30 字數 1642 閱讀 7901

由於業務需要統計一批資料,用到關於mysql的時間操作函式和儲存過程,問題已經基本解決,把過程記錄下:

1. mysql的語句中不支援直接用迴圈,迴圈只能在儲存過程中使用;

2. 寫為檔案時,注意一些隱藏的字元,造成語法錯誤。本例中注釋中包含一些不可見字元,沒有找到。

3. 儲存過程中盡量多使用分好,分割開語句。本例中 drop一句最初沒有寫,導致一直有錯。

4. 時間函式很強大,可以避免一些工作。

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");

mysql中生成時間維度的儲存過程(儲存過程示例)

本文主要記錄在bi和資料分析過程中碰到的生成時間維度的問題,另外也是乙個mysql的儲存過程基礎示例 包含 儲存過程基本語法 變數定義 while迴圈 異常處理 以下儲存過程生成了以當前日期為基準前後3650天的日期記錄 sql如下 create table dim date id int 8 no...

mysql中生成時間維度的儲存過程(儲存過程示例)

本文主要記錄在bi和資料分析過程中碰到的生成時間維度的問題,另外也是乙個mysql的儲存過程基礎示例 包含 儲存過程基本語法 變數定義 while迴圈 異常處理 以下儲存過程生成了以當前日期為基準前後3650天的日期記錄 sql如下 create table dim date id int 8 no...

mysql中生成時間維度的儲存過程(儲存過程示例)

本文主要記錄在bi和資料分析過程中碰到的生成時間維度的問題,另外也是乙個mysql的儲存過程基礎示例 包含 儲存過程基本語法 變數定義 while迴圈 異常處理 以下儲存過程生成了以當前日期為基準前後3650天的日期記錄 sql如下 create table dim date id int 8 no...