第一部分,基礎:常見日期(date)和時間(time)函數的使用
1、獲取當前日期時間
select now() | 【2019-06-22 22:22:23 】 返回當前日期時間,受set timestamp影響 |
select sysdate() | 【2019-06-22 22:31:32 】返回當前日期時間,同一語句中可能返回不同的值,不受set timestamp影響 |
select curdate() | 【2019-06-22 】返回當前日期 |
select curtime() | 【 22:42:46】返回當前時間 |
2、日期date()、時間time()、年year()、季quarter()、月month()、日day()、時hour()、分minute()、秒second()
select date(now()) 【2019-06-22】日期 | select time(now()) 【 23:18:47】時間 | | |
select year(now()) 【2019】年 | select quarter(now()) 【2】季 | select month(now()) 【6】月 | select day(now()) 【22】天 |
select hour(now()) 【23】時 | select minute(now()) 【18】分 | select second(now()) 【47】秒 | |
3、日期時間的加減 date_add(date,interval expr unit)
select date_add(now(), interval 1 year) 【2020-06-22 23:32:32】+1y | select date_add(now(), interval 1 quarter) 【 2019-09-22 23:34:07】+1q |
select date_add(now(), interval 1 month) 【2019-07-22 23:35:06】+1M | select date_add(now(), interval 1 week) 【 2019-06-29 23:36:16】+1w |
select date_add(now(), interval 1 day) 【2019-06-23 23:37:14】+1d | select date_add(now(), interval 1 hour) 【 2019-06-23 23:37:14】+1h |
select date_add(now(), interval 1 minute) 【2019-06-22 23:39:46】+1m | select date_add(now(), interval 1 second) 【 2019-06-22 23:39:39】+1s |
特別注意的點:
1、平年、閏年2月天數問題 select date_add('2005-02-28', interval -1 year) 【2004-02-28】 這裏結果並不是我們想要的2004-02-29
2、大月、小月天數問題 select date_add('2005-06-30', interval -3 month) 【2005-03-30】 這裏結果並不是我們想要的2004-03-31
|
4、日期時間格式化 date_format(datetime,format),解析 str_to_date(str,format)
select date_format(now(), '%Y-%m-%d %H:%i:%s')
| 輸出【2019-06-23 00:08:27】 |
select str_to_date('08.09.2008', '%m.%d.%Y')
| 輸出【 2008-08-09】 |
點擊查看格式化符號列表
6、間隔天數 datediff(dt1,dt2),間隔時間 timediff(dt1,dt2)
select datediff(now(),'2018-04-09')
| 輸出【440】 |
select timediff(now(),'2019-06-23 19:24:30')
| 輸出【 -18:56:03】 |
7、月初日期,月末日期last_day(dt)(月最後一天)
select date_add(curdate(), interval - day(curdate()) + 1 day)
| 輸出【2019-06-01】 |
select last_day(now())
| 輸出【 2019-06-30】 |
第二部分,實戰,計算同比增長,環比增長,累計同比
演示需要的模擬數據,apple表存儲了蘋果四年銷售量當月值,表僅有三個字段:id(主鍵),saledate(日期), salenum(銷售量)
1、計算月同比,月環比
2、計算年同比
3、計算季度同比,季度環比
4、計算按月累計同比
5、計算股票的漲幅
思路:綜上都是使用時間作爲連接同一個表的條件,但是對於股票時間並不連續,非交易日都是沒有數據的,所以計算股票的較前一交易日的漲幅時候需要另一張交易日的表,表結構如下
id now_trade_date(今天交易時間) last_trade_date(上一個交易時間)
然後三表連接就可以計算出漲幅了。
實際上爲了速度,每天做觸發器計算出股票漲幅,同比,累計同比數據並保存到表中,使用時直接查結果就更快了