「MySQL基础」MySQL日期函数处理:获取昨日/次日/近一周/下个月/最近一年/当前季度的日期数据

245 阅读3分钟

🙏废话不多说系列,直接开整🙏


MySQL数据库有关日期跳转的最基本的处理函数(date_add() 和 date_sub() ),下面针对这两个函数进行详细的使用实例展示:

(1)日期跳转
-- 1.1 当前日期日期跳转
select
	now() as 此时此刻
	, date_add(now(), interval 1 day) as 明日此时
	, date_sub(now(), interval -1 day) as 明日此时2
	, date_add(now(), interval 1 week) as 下周今日
	, date_sub(now(), interval -1 week) as 下周今日2
	, date_add(now(), interval 1 month) as 下月此时
	, date_sub(now(), interval -1 month) as 下月此时2
	, date_add(now(), interval 1 year) as 明年此时
	, date_sub(now(), interval -1 year) as 明年此时2
from dual;

-- 1.2 指定日期跳转
select
	'2024-06-16' 指定日期
	, date_add('2024-06-16', interval 1 day) as 明日此时
	, date_sub('2024-06-16', interval -1 day) as 明日此时2
	, last_day('2024-06-16') as 月最后一日
	, concat('2024-06', '-01') as 月第一天
from dual;

image.png

(2)语法模板
-- mysql查询今天、昨天、7天、近30天、本月、上一月 数据
-- 今天
select * from 表名 where to_days(时间字段名) = to_days(now());
-- 昨天
SELECT * FROM 表名 WHERE TO_DAYS( now() ) - TO_DAYS( 时间字段名) <= 1
-- 7天
SELECT * FROM 表名 where DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= date(时间字段名)
-- 近30天
SELECT * FROM 表名 where DATE_SUB(CURDATE(), INTERVAL 30 DAY) <= date(时间字段名)
-- 本月
SELECT * FROM 表名 WHERE DATE_FORMAT( 时间字段名, '%Y%m' ) = DATE_FORMAT( CURDATE() , '%Y%m' )
-- 上一月
SELECT * FROM 表名 WHERE PERIOD_DIFF( date_format( now() , '%Y%m' ) , date_format( 时间字段名, '%Y%m' ) ) =1

-- 【季度】
-- 查询本季度数据
select * from 表名 where QUARTER(create_date) = QUARTER(now());
-- 查询上季度数据
select * from 表名 where QUARTER(create_date) = QUARTER(DATE_SUB(now(),interval 1 QUARTER));
-- 查询本年数据
select * from 表名 where YEAR(create_date) = YEAR(now());
-- 查询上年数据
select * from 表名 where year(create_date) = year(date_sub(now(),interval 1 year));

-- 查询距离当前现在6个月的数据
select name,create_time from enterprise where create_time between date_sub(now(),interval 6 month) and now();

-- 查询上个月的数据
select name,create_time from enterprise where date_format(create_time,'%Y-%m') = date_format(DATE_SUB(CURDATE(), INTERVAL 1 MONTH),'%Y-%m')
-- 查询当前所在月份的数据
select * from user where DATE_FORMAT(create_time,'%Y%m') = DATE_FORMAT(CURDATE(),'%Y%m') ; 
-- 查询所在一周的数据
select * from user where WEEKOFYEAR(FROM_UNIXTIME(create_time,'%y-%m-%d')) = WEEKOFYEAR(now()) 
select * from user where MONTH(FROM_UNIXTIME(create_time,'%y-%m-%d')) = MONTH(now()) 
select * from user where YEAR(FROM_UNIXTIME(create_time,'%y-%m-%d')) = YEAR(now()) and MONTH(FROM_UNIXTIME(create_time,'%y-%m-%d')) = MONTH(now()) 
select * from user where create_time between  上月最后一天  and 下月第一天 ;
-- 获取当月的第一天和最后一天
select last_day(concat('2021-12', '-01')) as lastDate, concat('2021-12', '-01') as firstDate;

-- 【周】
-- 获取当前这周的数据
SELECT id, name, create_time FROM user WHERE YEARWEEK(date_format(create_time,'%Y-%m-%d')) = YEARWEEK(now());
-- 获取上周的数据
SELECT id, name, create_time FROM user WHERE YEARWEEK(date_format(create_time,'%Y-%m-%d')) = YEARWEEK(now()) - 1;

-- 【年】
-- 获取去年的登录日志数据
select * from login_log where year(create_time) = year(date_sub(now(), interval 1 year));
select * from login_log where year(create_time) = year(now());

🙏至此,非常感谢阅读🙏