MySQL時間段查詢(面試常問)--必會

1.準備數據

SET FOREIGN_KEY_CHECKS=0;  

CREATE TABLE `user_info`(
	`id` INT NOT NULL PRIMARY KEY,
	`full_name` VARCHAR(30) NOT NULL,
	`addedTime` datetime NOT NULL
)ENGINE=INNODB DEFAULT CHARSET=utf8;

INSERT INTO `user_info` VALUES (1, '小野', '2020-2-3 15:26:19');
INSERT INTO `user_info` VALUES (2, '小薩', '2015-6-10 15:26:43');
INSERT INTO `user_info` VALUES (3, '小貝', '2018-7-27 15:27:23');
INSERT INTO `user_info` VALUES (4, '小麗', '2017-12-21 15:27:59');
INSERT INTO `user_info` VALUES (5, '小馬', '2019-10-24 15:28:23');
INSERT INTO `user_info` VALUES (6, '黑蛋', '2020-1-29 20:16:19');
INSERT INTO `user_info` VALUES (7, '阿華', '2020-1-5 20:19:15');
INSERT INTO `user_info` VALUES (8, '胖墩', '2019-12-18 21:28:29');
INSERT INTO `user_info` VALUES (9, '小胖', '2020-2-13 23:12:19');
INSERT INTO `user_info` VALUES (10, '小周', '2020-2-5 16:21:32');

2.查詢語句

-- 1.查詢時間到現在的新增人員名單
1.SELECT full_name AS 姓名, addedTime FROM user_info WHERE DATE(addedTime)<NOW();
2.SELECT full_name AS 姓名, addedTime FROM user_info WHERE TO_DAYS(addedTime)<TO_DAYS(NOW());
-- 2.查詢昨天新增的人員的名單(更多天數類似)
1.SELECT full_name AS 姓名, addedTime FROM user_info WHERE TO_DAYS(NOW())-TO_DAYS(addedTime)=1;
2.SELECT full_name AS 姓名, addedTime FROM user_info WHERE DATE(addedTime)>=SUBDATE(CURDATE(),INTERVAL 1 DAY);
-- 3.查詢近7天新增人員的名單 
SELECT full_name AS 姓名, addedTime FROM user_info WHERE DATE(addedTime)>=DATE_SUB(CURDATE(), INTERVAL 7 DAY);  
-- 4.查詢近30天新增人員名單
SELECT full_name AS 姓名, addedTime FROM user_info WHERE DATE(addedTime)>=DATE_SUB(CURDATE(),INTERVAL 30 DAY);
-- 5.查詢本月新增人員信息  
SELECT full_name AS 姓名, addedTime FROM user_info WHERE DATE_FORMAT(CURDATE(),'%Y%m')=DATE_FORMAT(addedTime,'%Y%m');
-- 6.查詢上一月新增人員信息  
SELECT full_name AS 姓名, addedTime FROM user_info WHERE PERIOD_DIFF(DATE_FORMAT(CURDATE(),'%Y%m'),DATE_FORMAT(addedTime,'%Y%m'))=1;
-- 7.查詢本季度新增人員數據  
select fullName,addedTime FROM t_user where QUARTER(addedTime)=QUARTER(now()); 
-- 8.查詢上季度數據  
select fullName,addedTime FROM t_user where QUARTER(addedTime)=QUARTER(DATE_SUB(now(),interval 1 QUARTER));  
-- 9.查詢本年數據  
1.SELECT full_name, addedTime FROM user_info WHERE YEAR(NOW())=YEAR(addedTime);
2.SELECT full_name, addedTime FROM user_info WHERE DATE_FORMAT(CURDATE(),'%Y')=DATE_FORMAT(addedTime,'%Y');
-- 10.查詢上年數據  
SELECT full_name, addedTime FROM user_info WHERE YEAR(addedTime)=YEAR(DATE_SUB(NOW(),INTERVAL 1 YEAR));
-- 11.查詢距離當前現在6個月的新增人員數據  
SELECT full_name, addedTime FROM user_info WHERE DATE(addedTime) BETWEEN DATE_SUB(NOW(),INTERVAL 6 MONTH) AND NOW();
-- 12.查詢當前這周的新增數據  
SELECT full_name, addedTime FROM user_info WHERE YEARWEEK(NOW())=YEARWEEK(addedTime);
-- 13.查詢上週新增人員數據  
SELECT full_name, addedTime FROM user_info WHERE YEARWEEK(NOW(),0)-1=YEARWEEK(addedTime,0); 
-- 14.查詢指定時間段的數據
1.SELECT full_name, addedTime FROM user_info WHERE addedTime BETWEEN DATE('2019-12-12') AND DATE('2020-02-02');
2.SELECT full_name, addedTime FROM user_info WHERE addedTime>=DATE('2019-12-12') AND addedTime<=DATE('2020-02-02');

注意:
1、查詢時間段內的數據,一般可以用between and 或 <> 來指定時間段。

2、mysql的時間字段類型有:datetime,timestamp,date,time,year。

相關函數語法:

1.YEAR(date)
Returns the year for date, in the range 1000 to 9999, or 0 for the "zero" date.
返回日期的年份,範圍爲1000到9999,或者對於“零”日期返回0。

2.QUARTER(date)
Returns the quarter of the year for date, in the range 1 to 4.
返回日期的一年中的季度,範圍爲1到4。

3.MONTH(date)
Returns the month for date, in the range 1 to 12 for January to December, or 0 for dates such as ‘0000-00-00’ or ‘2008-00-00’ that have a zero month part.
返回日期的月份,1月至12月的範圍爲1至12,對於包含月份爲零的日期(如“0000-00-00”或“2008-00-00”),返回0。

4.DATE_SUB(date,INTERVAL expr type)
語法:INTERVAL 'integer [- integer]' {YEAR | MONTH} [(precision)][TO {YEAR | MONTH}]
該數據類型常用來表示一段時間差, 注意時間差只精確到年和月. precision爲年或月的精確域, 有效範圍是0到9, 默認值爲2.

用法:interval 得到的是一個時間間隔,是一種數據類型,可以直接與日期進行計算;
eg> select sysdate - (interval '1' year) from dual;  (當前時間的前一年)

5.DATEDIFF() 函數返回兩個日期之間的天數。
6.PERIOD_DIFF()函數返回兩個日期之間的月份數。
7.YEARWEEK(date, [mode]) 是獲取年份和週數
Mode    First day of week 
0       Sunday
1       Monday

mysql中內置函數date_add和date_sub能對指定的時間進行增加或減少一個指定的時間間隔,語法如下:

DATE_ADD(date,INTERVAL expr type)
DATE_SUB(date,INTERVAL expr type)

關注公衆號,獲取更多面試資料
一丁點技術

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