SELECT CONCAT(DATE_FORMAT(times, '%Y-%m-%d %H'),':',RPAD(floor(DATE_FORMAT(times,'%i')/15) * 15,2,0)) as period,count(*) FROM record group by period
sql解析,先用date_format取出分,再與15求商,得到余數最小值。乘以15得到時間段:
floor(DATE_FORMAT(times,'%i')/15) * 15
。再向右填充為兩位數
RPAD(floor(DATE_FORMAT(times,'%i')/15) * 15,2,0)
最后CONCAT講時間與取出的時間連接起來
CONCAT(DATE_FORMAT(times, '%Y-%m-%d %H'),':',RPAD(floor(DATE_FORMAT(times,'%i')/15) * 15,2,0))
函數定義和用法
CONCAT
1. 含義:
將多個字符串連接成一個字符串。
2. 語法:
concat(str1, str2,...) 返回結果為連接參數產生的字符串,如果有任何一個參數為null,則返回值為null。
DATE_FORMAT()
含義:
DATE_FORMAT() 函數用於以不同的格式顯示日期/時間數據。
語法:
DATE_FORMAT(date,format)
date 參數是合法的日期。format 規定日期/時間的輸出格式。
RPAD
rpad函數從右邊對字符串使用指定的字符進行填充
語法:
rpad(string,padded_length,[pad_string])
string
表示:被填充的字符串
padded_length
表示:字節的長度,是返回的字節長度的字符串,如果這個數量比原字符串的字節長度要短,rpad函數將會把字符串截取成從左到右的n個字符;如果正好是中文要被截斷,那么這個中文返回的是空格。如:rpad('函數',3) ----返回的是'函 '。
pad_string
是個可選參數,這個字符串是要粘貼到string的右邊,如果這個參數未寫,rpad函數將會在string的右邊粘貼空格。
例如:
rpad('tech', 7); 將返回'tech '
rpad('tech', 2); 將返回'te'
rpad('tech', 8, '0'); 將返回'tech0000'
rpad('tech on the net', 15, 'z'); 將返回 'tech on the net'
rpad('tech on the net', 16, 'z'); 將返回 'tech on the netz'
與rpad函數對應的是lpad函數:
LAPD
語法格式如下:
lpad( string, padded_length, [ pad_string ] )
string
准備被填充的字符串;
padded_length
填充之后的字符串長度,也就是該函數返回的字符串長度,如果這個數量比原字符串的長度要短,lpad函數將會把字符串截取成從左到右的n個字符;
pad_string
填充字符串,是個可選參數,這個字符串是要粘貼到string的左邊,如果這個參數未寫,lpad函數將會在string的左邊粘貼空格。
FLOOR
floor函數返回小於等於該值的最大整數