mysql的時間日期函數總結。案例應用:計算同比、環比、累計同比,股票類延伸。---- 前海最靚的仔,陳宇超

第一部分,基礎:常見日期(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】+1yselect 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】+1Mselect 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】+1dselect 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】+1mselect 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(銷售量)
chenyuchao

1、計算月同比,月環比陳宇超
2、計算年同比

陳宇超

3、計算季度同比,季度環比

陳宇超

4、計算按月累計同比

陳宇超

5、計算股票的漲幅

思路:綜上都是使用時間作爲連接同一個表的條件,但是對於股票時間並不連續,非交易日都是沒有數據的,所以計算股票的較前一交易日的漲幅時候需要另一張交易日的表,表結構如下
id now_trade_date(今天交易時間) last_trade_date(上一個交易時間)
然後三表連接就可以計算出漲幅了。

實際上爲了速度,每天做觸發器計算出股票漲幅,同比,累計同比數據並保存到表中,使用時直接查結果就更快了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章