MySQL查詢今天的數據(昨天、本月)


對於MySQL而言,它有自己的函數來查詢時間和日期,查詢今天的數據也有相應的做法。

數據庫結構如下,進行說明:

CREATE TABLE `orders` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `order_name` varchar(45) COLLATE utf8_bin NOT NULL,
  `order_time` datetime NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

1.查詢今天的數據

1.1方法一

SELECT * FROM orders WHERE TO_DAYS(order_time) = TO_DAYS(NOW())

參數說明:

TO_DAYS()是MySQL自帶的函數,其作用是查詢指定日期到0年的天數。

NOW()是表示當前時間 

當前時間見詳細說明

1.2方法二

select * from orders where DAY(order_time)  = DAY(NOW())

參數說明:

YEAR()返回指定時間的年份
MONTH()返回指定時間的月份
DAY()返回指定時間的日份

具體用法:

SELECT YEAR('2021-06-05');##2021
SELECT MONTH('2021-06-05');##6 SELECT DAY('2021-06-05');##5

2.查詢昨天的數據

SELECT * FROM orders WHERE TO_DAYS(NOW()) - TO_DAYS(order_time) = 1

查詢昨天的數據,只需要今天的天數比數據的時間多1天即可。

3.查詢最近7天的數據

最近7天,也包括今天。

SELECT * FROM orders where DATE_SUB(CURDATE(), INTERVAL 7 DAY) < date(order_time)

參數說明:

DATE_SUB() 函數作用是對日期減去指定的時間間隔(天,月,季度...),返回新的日期。

date()函數時把值轉換為日期類型。

CURDATE()是當前的日期,

具體用法:

SELECT DATE_SUB(CURDATE(), INTERVAL 7 DAY); ##2021-05-26
SELECT date(NOW()); ##2021-06-02

當前日期用法見詳細說明

4.查詢最近30天的數據

最近30天,也包括今天。

SELECT * FROM orders where DATE_SUB(CURDATE(), INTERVAL 30 DAY) < date(order_time)

5.查詢本月的數據

5.1方法一

SELECT * FROM orders WHERE DATE_FORMAT(order_time, '%Y%m') = DATE_FORMAT(CURDATE(), '%Y%m')

參數說明:

DATE_FORMAT()是對日期進行格式化,%Y%m表示只格式化到月

具體用法:

SELECT DATE_FORMAT('2021-06-02 10:30:25','%Y%m') ##202106

5.2方法二

select * from orders where MONTH(order_time)  = MONTH(NOW()) 

6.查詢上個月的數據

SELECT * FROM orders WHERE PERIOD_DIFF(DATE_FORMAT(NOW(),'%Y%m'), DATE_FORMAT(order_time,'%Y%m')) =1

參數說明:

PERIOD_DIFF()函數返回兩日期之間的差異

具體用法:

SELECT PERIOD_DIFF(20210530, 20210512); ##18

7.查詢最近6個月的數據

最近6個月,包含當前月份。

SELECT * FROM orders WHERE PERIOD_DIFF(DATE_FORMAT(NOW(),'%Y%m'), DATE_FORMAT(order_time,'%Y%m')) <=5

8.查詢本季度的數據

SELECT * FROM orders WHERE QUARTER(order_time)=QUARTER(NOW())

參數說明:

QUARTER()函數返回給定日期值(1到4之間的數字)的一年中的季度。

具體用法:

SELECT QUARTER("2021-05-01 09:34:21"); ##2

9.查詢上季度的數據

SELECT * FROM orders WHERE QUARTER(order_time)=QUARTER(DATE_SUB(NOW(),INTERVAL 1 QUARTER))

這里使用DATE_SUB()函數獲取上個季度的日期。

10.查詢今年的數據

SELECT * FROM orders WHERE YEAR(order_time)=YEAR(NOW())

11.查詢去年的數據

SELECT * FROM orders WHERE YEAR(order_time)=YEAR(DATE_SUB(NOW(),INTERVAL 1 YEAR))

這里使用DATE_SUB()函數獲取上一年的日期。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM