1. 程式人生 > >sql中時間以5分鐘,半個小時,任意間隔分組

sql中時間以5分鐘,半個小時,任意間隔分組

開發中遇到過問題就是對時間以半個小時分鐘分組,如統計08:00-08:30的人數,08:30-09:00的人數,貌似sql中沒有這樣的函式吧,直接從資料庫裡查出來,在java裡分組也太low了吧

想到方法1 自定義函式,自己實現時間的半個小時轉換,統計時呼叫函式

CREATE  FUNCTION `date_half_hour_format`(in_date TIMESTAMP) RETURNS TIMESTAMP
BEGIN
	DECLARE out_date TIMESTAMP;
	DECLARE s_date VARCHAR(255);
	DECLARE s_minute VARCHAR(2);
	DECLARE int_minute INT;
	
	SET s_minute = SUBSTRING(in_date, 15, 2);
	SET int_minute = CAST(s_minute AS SIGNED);
	
	IF int_minute <= 29 THEN
	  SET int_minute = 0;
	  SET s_date = CONCAT(LEFT(in_date, 14),'0',int_minute);
	ELSE
	  SET int_minute = 30;
	  SET s_date = CONCAT(LEFT(in_date, 14),int_minute);
	END IF;
	  
	SET out_date = STR_TO_DATE(s_date,'%Y-%m-%d %H:%i');
	
	RETURN out_date;
    END

方法2 學過c語言更清楚c語言建立時間都是一個long的時間戳,可以對時間做除法運算,就是時間long的值除以30*60,這樣就能得出半個小時的時間了,mysql中有函式unix_timestamp獲取long的時間,從long轉date的form_unixtime

SELECT FROM_UNIXTIME((UNIX_TIMESTAMP(CURRENT_TIMESTAMP) DIV 1800)*1800)


這樣就可以按任意時間分組了