常用時(shí)間函數(shù)
NOW()當(dāng)前時(shí)間芳绩、CURDATE()當(dāng)前日期、CURTIME()當(dāng)前時(shí)間
SELECT NOW(),CURDATE(),CURTIME();
>2019-03-22 10:20:13
>2019-03-22
>10:20:13
ROUND() 四舍五入
FROM_UNIXTIME() 將時(shí)間戳格式化(10位時(shí)間戳,精確到秒)
若數(shù)據(jù)庫(kù)存的時(shí)間戳為13位(精確到毫秒)盹兢,因MySQL只能轉(zhuǎn)10位砂轻,則進(jìn)行轉(zhuǎn)換
SELECT FROM_UNIXTIME(ROUND(1552665572000/1000));
>2019-03-15 23:59:32
DATE_FORMAT() 格式化時(shí)間
SELECT DATE_FORMAT(NOW(),'%Y-%m-%d %H:%i:%s');
>2019-03-22 09:58:50
DATE_SUB() 日期減去指定的時(shí)間間隔 (DATE_ADD()同理)
DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= date(時(shí)間字段名) 近7天
type常用參數(shù):DAY、MONTH然爆、YEAR站粟、HOUR
常用判空函數(shù)
IFNULL(fieldA,fieldB)
當(dāng)字段fieldA是NULL時(shí)取fieldB,不是NULL時(shí)取fieldA的值
COALESCE (exp,value1,value2……,valuen)
exp為待檢測(cè)的表達(dá)式曾雕,返回包括exp在內(nèi)的所有參數(shù)中的第一個(gè)非空表達(dá)式
SELECT IFNULL(b.count,0),COALESCE(c.sum,0) FROM ...
常用與于統(tǒng)計(jì)總數(shù)時(shí)對(duì)null值賦0的作用
MySQL常見(jiàn)JOIN語(yǔ)法
SELECT ... FROM table1 xxx JOIN table2 ON ...
INNER JOIN(內(nèi)連接):取得兩個(gè)表中存在連接匹配關(guān)系的記錄奴烙。
LEFT JOIN(左連接):取得左表(table1)完全記錄,即是右表(table2)并無(wú)對(duì)應(yīng)匹配記錄翻默。
RIGHT JOIN(右連接):與 LEFT JOIN 相反缸沃,取得右表(table2)完全記錄,即是左表(table1)并無(wú)匹配對(duì)應(yīng)記錄修械。
注:MySQL不支持FULL JOIN,不過(guò)可以通過(guò)UNION 關(guān)鍵字來(lái)合并 LEFT JOIN 與 RIGHT JOIN來(lái)模擬FULL JOIN
UNION
SELECT ... FROM ... UNION SELECT ... FROM ...
對(duì)結(jié)果集取并集操作趾牧,不包括重復(fù)行,同時(shí)進(jìn)行默認(rèn)規(guī)則的排序
去重且排序
UNION ALL
SELECT FROM ... UNION ALL SELECT ... FROM ...
對(duì)結(jié)果集取并集操作肯污,包括重復(fù)行翘单,不進(jìn)行排序
不去重不排序
折線圖統(tǒng)計(jì)一段時(shí)間沒(méi)有數(shù)據(jù)補(bǔ)0的情況
構(gòu)建一個(gè)虛擬的最近日期記錄吨枉,如:
統(tǒng)計(jì)最近三天
SELECT CURDATE() AS time
UNION ALL
SELECT DATE_SUB(CURDATE(), interval 1 DAY) AS time
UNION ALL
SELECT DATE_SUB(CURDATE(), interval 2 DAY) AS time
統(tǒng)計(jì)最近三月
SELECT DATE_FORMAT(CURDATE(), '%Y-%m') AS time
UNION ALL
SELECT DATE_FORMAT(DATE_SUB(CURDATE(), interval 1 MONTH), '%Y-%m') AS time
UNION ALL
SELECT DATE_FORMAT(DATE_SUB(CURDATE(), interval 2 MONTH), '%Y-%m') AS time
統(tǒng)計(jì)最近三小時(shí)
SELECT DATE_FORMAT(NOW(), '%m-%d %H') as time
UNION ALL
SELECT DATE_FORMAT(DATE_SUB(NOW(), INTERVAL 1 HOUR), '%m-%d %H') AS time
UNION ALL
SELECT DATE_FORMAT(DATE_SUB(NOW(), INTERVAL 2 HOUR), '%m-%d %H') AS time
或利用mysql自帶數(shù)據(jù)庫(kù)生成數(shù)據(jù),如生成最近7天日期列表
SELECT @s :=@s + 1 as `index`, DATE(DATE_SUB(CURRENT_DATE, INTERVAL @s DAY)) AS `date`
FROM mysql.help_topic,(SELECT @s := -1) temp
WHERE @s < 6
ORDER BY `date` DESC
最后將以上數(shù)據(jù)與業(yè)務(wù)數(shù)據(jù)取左連接LEFT JOIN即可哄芜。