1.情景展示
在進行按日期統計數據的時候,我們經常需要對日期的開始時間和結束時間有要求;
在mysql中,日期字段如何進行時間的計算呢?
2.to_days()
to_days(日期)函數:返回從0000年(公元1年)至指定日期的總天數(只計算日期不計算時間)。
to_days(nows()):將當前日期轉換成距離0年的天數;
我們也可以用它來表示:今天
to_days(日期):只計算日期不計算時間,舉例證明:
我們可以看到:
不管是23:59:59還是00:00:00,2022年2月11日轉換成天數后,都是738562天。
2.1查詢今天的數據
select * from 表名 where to_days(時間字段名) = to_days(now());
2.2查詢昨天的數據
SELECT * FROM 表名 WHERE TO_DAYS( NOW( ) ) – TO_DAYS( 時間字段名) <= 1
2.3查詢近7天的數據
SELECT * FROM 表名 where DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= date(時間字段名)
2.4查詢近30天的數據
SELECT * FROM 表名 where DATE_SUB(CURDATE(), INTERVAL 30 DAY) <= date(時間字段名)
2.5查詢本月的數據
SELECT * FROM 表名 WHERE DATE_FORMAT( 時間字段名, '%Y%m' ) = DATE_FORMAT( CURDATE() , '%Y%m' )
或
select * from 表名 where date_format(字段名,'%Y-%m')=date_format(now(),'%Y-%m')
2.6查詢上一月的數據
SELECT * FROM 表名 WHERE PERIOD_DIFF( date_format( now() , '%Y%m' ) , date_format( 時間字段名, '%Y%m' ) ) = 1
或
select * from 表名 where date_format(字段名,'%Y-%m') = date_format(DATE_SUB(curdate(), INTERVAL 1 MONTH),'%Y-%m')
2.7查詢本季度的數據
select * from 表名 where QUARTER(時間字段) = QUARTER(now());
2.8查詢上一季度的數據
select * from 表名 where QUARTER(時間字段)=QUARTER(DATE_SUB(now(),interval 1 QUARTER));
2.9查詢本年的數據
select * from 表名 where YEAR(時間字段)=YEAR(NOW());
3.0查詢上一年的數據
select * from 表名 where year(字段名) = year(date_sub(now(),interval 1 year));
3.1查詢本周的數據
SELECT * FROM 表名 WHERE YEARWEEK(date_format(字段名,'%Y-%m-%d')) = YEARWEEK(now());
3.2查詢上一周的數據
SELECT * FROM 表名 WHERE YEARWEEK(date_format(字段名,'%Y-%m-%d')) = YEARWEEK(now()) - 1;
3.3查詢近6月的數據
select * from 表名 where 字段名 between date_sub(now(),interval 6 month) and now();
3.date_sub()
DATE_SUB(date,INTERVAL expr unit)
date:日期類型;
expr:間隔數字(整數:正整數,時間會往前推;負整數,會往后推);
unit:間隔單位。
select SYSDATE(), DATE_SUB(SYSDATE(),INTERVAL 1 minute)
union
select SYSDATE(), DATE_SUB(SYSDATE(),INTERVAL -1 minute)
有了這個函數,我們就可以取任何時間區間的日期啦(並且語法和Oracle類似)。
4.DATE_ADD()
2022年2月26日19:39:20
DATE_ADD(date,INTERVAL expr unit)
date:日期類型;
expr:間隔數字(整數:正整數,時間會往前推;負整數,會往后推);
unit:間隔單位。
用法和DATE_SUB()一模一樣。
如:獲取本月1號
SELECT DATE_ADD(CURDATE(),INTERVAL -DAY(CURDATE()) + 1 DAY);
寫在最后
哪位大佬如若發現文章存在紕漏之處或需要補充更多內容,歡迎留言!!!