mysql上上月消与上月消费_MySQL日期操作(本月,上月时间)

本文介绍了如何使用MySQL进行日期操作,包括获取本月第一天、最后一天,上月第一天、最后一天,以及本周、上周、本月、上月、本年等的日期范围,并提供了相应的时间差值换算方法。
摘要由CSDN通过智能技术生成

1、interval的说明:

1.1、当函数使用时,即interval(),为比较函数,如:interval(10,1,3,5,7); 结果为4;

原理:10为被比较数,后面1,3,5,7为比较数,将后面四个依次与10比较,看后面数字组有多少个少于10,则返回其个数。前提是后面数字组为从小到大排列,否则返回结果0。

1.2、当关键词使用时,表示为设置时间间隔,常用在date_add()与date_sub()函数里,

如:interval 1 day ,解释为将时间间隔设置为1天。

3、本月第一天

select date_add(curdate(), interval - day(curdate()) + 1 day);

今天是当月的第几天:SELECT DAYOFMONTH( NOW());

4、本月最后一天

select last_day(curdate());

5、上月第一天

select date_add(curdate()-day(curdate())+1,interval -1 month);

6、上月最后一天

select last_day(date_sub(now(),interval 1 month));

7、下月第一天

select date_add(curdate()-day(curdate())+1,interval 1 month);

8、下月最后一天

select last_day(date_sub(now(),interval -1 month));

9、本月天数

select day(last_day(curdate()));

10、上月今天的当前日期

select date_sub(curdate(), interval 1 month);

11、上月今天的当前时间(时间戳)

select unix_timestamp(date_sub(now(),interval 1 month));

12、获取当前时间与上个月之间的天数

select datediff(curdate(), date_sub(curdate(), interval 1 month));

13、今天

SELECT DATE_FORMAT(NOW(),'%Y-%m-%d 00:00:00') AS '今天开始';

SELECT DATE_FORMAT(NOW(),'%Y-%m-%d 23:59:59') AS '今天结束';

14、昨天

SELECT DATE_FORMAT( DATE_SUB(CURDATE(), INTERVAL 1 DAY), '%Y-%m-%d 00:00:00') AS '昨天开始';

SELECT DATE_FORMAT( DATE_SUB(CURDATE(), INTERVAL 1 DAY), '%Y-%m-%d 23:59:59') AS '昨天结束';

15、上周

SELECT DATE_FORMAT( DATE_SUB( DATE_SUB(CURDATE(), INTERVAL WEEKDAY(CURDATE()) DAY), INTERVAL 1 WEEK), '%Y-%m-%d 00:00:00') AS '上周一';

SELECT DATE_FORMAT( SUBDATE(CURDATE(), WEEKDAY(CURDATE()) + 1), '%Y-%m-%d 23:59:59') AS '上周末';

16、本周

SELECT DATE_FORMAT( SUBDATE(CURDATE(),DATE_FORMAT(CURDATE(),'%w')-1), '%Y-%m-%d 00:00:00') AS '本周一';

SELECT DATE_FORMAT( SUBDATE(CURDATE(),DATE_FORMAT(CURDATE(),'%w')-7), '%Y-%m-%d 23:59:59') AS '本周末';

-- 上面的本周算法会有问题,因为mysql是按照周日为一周第一天,如果当前是周日的话,会把时间定为到下一周.

SELECT DATE_FORMAT( DATE_SUB(CURDATE(), INTERVAL WEEKDAY(CURDATE()) DAY), '%Y-%m-%d 00:00:00') AS '本周一';

SELECT DATE_FORMAT( DATE_ADD(SUBDATE(CURDATE(), WEEKDAY(CURDATE())), INTERVAL 6 DAY), '%Y-%m-%d 23:59:59') AS '本周末';

17、上月

SELECT DATE_FORMAT( DATE_SUB(CURDATE(), INTERVAL 1 MONTH), '%Y-%m-01 00:00:00') AS '上月初';

SELECT DATE_FORMAT( LAST_DAY(DATE_SUB(CURDATE(), INTERVAL 1 MONTH)), '%Y-%m-%d 23:59:59') AS '上月末';

18、本月

SELECT DATE_FORMAT( CURDATE(), '%Y-%m-01 00:00:00') AS '本月初';

SELECT DATE_FORMAT( LAST_DAY(CURDATE()), '%Y-%m-%d 23:59:59') AS '本月末';

19、本年第一天

SELECT DATE_SUB(CURDATE(),INTERVAL dayofyear(now())-1 DAY)

concat(year(now()),'-01-01')//当前年份的第一天

concat(year(now()),'-12-31')//当前年份的最后一天

20、时间差值换算

SELECT

TIME_TO_SEC(TIMEDIFF('2018-09-30 19:38:45', '2018-08-23 10:13:01')) AS DIFF_SECOND1, -- 秒

UNIX_TIMESTAMP('2018-09-30 19:38:45')-UNIX_TIMESTAMP('2018-08-23 10:13:01') AS DIFF_SECOND2, -- 秒

TIMESTAMPDIFF(SECOND,'2018-08-23 10:13:01','2018-09-30 19:38:45') AS DIFF_SECOND3, -- 秒

TIMESTAMPDIFF(MINUTE,'2018-08-23 10:13:01','2018-09-30 19:38:45') AS DIFF_MINUTE, -- 分

TIMESTAMPDIFF(HOUR,'2018-08-23 10:13:01','2018-09-30 19:38:45') AS DIFF_HOUR, -- 小时

TIMESTAMPDIFF(DAY ,'2018-08-23 10:13:01','2018-09-30 19:38:45') AS DIFF_DATE1, -- 天

DATEDIFF('2018-09-30 19:38:45','2018-08-23 10:13:01') AS DIFF_DATE2, -- 天

TIMESTAMPDIFF(MONTH,'2018-08-23 10:13:01','2018-09-25 19:38:45') AS DIFF_MONTH, -- 月

TIMESTAMPDIFF(YEAR,'2018-08-23 10:13:01','2020-07-25 19:38:45') AS DIFF_YEAR -- 年

FROM DUAL;

21、日期增加年,月,天,小时,分,秒

select date_add(日期, interval 1 day); 日期加天

select date_add(日期, interval 1 hour); 日期加小时

select date_add(日期, interval 1 minute); 日期加分

select date_add(日期, interval 1 second);日期加秒

select date_add(日期, interval 1 microsecond); 日期加微秒

select date_add(日期, interval 1 week); 日期加周

select date_add(日期, interval 1 month); 日期加月

select date_add(日期, interval 1 quarter); 日期加季度

select date_add(日期, interval 1 year); 日期加年

22、当月的所有天数循环(输入日期自动换算当月天数)

SELECT ADDDATE(y.first, x.d - 1) as d

FROM (

SELECT 1 AS d UNION ALL

SELECT 2 UNION ALL

SELECT 3 UNION ALL

SELECT 4 UNION ALL

SELECT 5 UNION ALL

SELECT 6 UNION ALL

SELECT 7 UNION ALL

SELECT 8 UNION ALL

SELECT 9 UNION ALL

SELECT 10 UNION ALL

SELECT 11 UNION ALL

SELECT 12 UNION ALL

SELECT 13 UNION ALL

SELECT 14 UNION ALL

SELECT 15 UNION ALL

SELECT 16 UNION ALL

SELECT 17 UNION ALL

SELECT 18 UNION ALL

SELECT 19 UNION ALL

SELECT 20 UNION ALL

SELECT 21 UNION ALL

SELECT 22 UNION ALL

SELECT 23 UNION ALL

SELECT 24 UNION ALL

SELECT 25 UNION ALL

SELECT 26 UNION ALL

SELECT 27 UNION ALL

SELECT 28 UNION ALL

SELECT 29 UNION ALL

SELECT 30 UNION ALL

SELECT 31

) x,

(

SELECT '2019-09-05' - INTERVAL DAY('2019-09-05') - 1 DAY AS first, DAY(LAST_DAY('2019-09-05')) AS last

) y

WHERE x.d <= y.last

23、模拟12个月日期

SELECT STR_TO_DATE(CONCAT(YEAR(now()),'-01-01'),'%Y-%m-%d') BEGIN_V,STR_TO_DATE(CONCAT(YEAR(now()),'-01-31'),'%Y-%m-%d') END_V

UNION

SELECT STR_TO_DATE(CONCAT(YEAR(now()),'-02-01'),'%Y-%m-%d') BEGIN_V,STR_TO_DATE(CONCAT(YEAR(now()),'-02-28'),'%Y-%m-%d') END_V

UNION

SELECT STR_TO_DATE(CONCAT(YEAR(now()),'-03-01'),'%Y-%m-%d') BEGIN_V,STR_TO_DATE(CONCAT(YEAR(now()),'-03-31'),'%Y-%m-%d') END_V

UNION

SELECT STR_TO_DATE(CONCAT(YEAR(now()),'-04-01'),'%Y-%m-%d') BEGIN_V,STR_TO_DATE(CONCAT(YEAR(now()),'-04-30'),'%Y-%m-%d') END_V

UNION

SELECT STR_TO_DATE(CONCAT(YEAR(now()),'-05-01'),'%Y-%m-%d') BEGIN_V,STR_TO_DATE(CONCAT(YEAR(now()),'-05-31'),'%Y-%m-%d') END_V

UNION

SELECT STR_TO_DATE(CONCAT(YEAR(now()),'-06-01'),'%Y-%m-%d') BEGIN_V,STR_TO_DATE(CONCAT(YEAR(now()),'-06-30'),'%Y-%m-%d') END_V

UNION

SELECT STR_TO_DATE(CONCAT(YEAR(now()),'-07-01'),'%Y-%m-%d') BEGIN_V,STR_TO_DATE(CONCAT(YEAR(now()),'-07-31'),'%Y-%m-%d') END_V

UNION

SELECT STR_TO_DATE(CONCAT(YEAR(now()),'-08-01'),'%Y-%m-%d') BEGIN_V,STR_TO_DATE(CONCAT(YEAR(now()),'-08-31'),'%Y-%m-%d') END_V

UNION

SELECT STR_TO_DATE(CONCAT(YEAR(now()),'-09-01'),'%Y-%m-%d') BEGIN_V,STR_TO_DATE(CONCAT(YEAR(now()),'-09-30'),'%Y-%m-%d') END_V

UNION

SELECT STR_TO_DATE(CONCAT(YEAR(now()),'-10-01'),'%Y-%m-%d') BEGIN_V,STR_TO_DATE(CONCAT(YEAR(now()),'-10-31'),'%Y-%m-%d') END_V

UNION

SELECT STR_TO_DATE(CONCAT(YEAR(now()),'-11-01'),'%Y-%m-%d') BEGIN_V,STR_TO_DATE(CONCAT(YEAR(now()),'-11-30'),'%Y-%m-%d') END_V

UNION

SELECT STR_TO_DATE(CONCAT(YEAR(now()),'-12-01'),'%Y-%m-%d') BEGIN_V,STR_TO_DATE(CONCAT(YEAR(now()),'-12-31'),'%Y-%m-%d') END_V

24、

#当年第一天:

SELECT DATE_SUB(CURDATE(),INTERVAL dayofyear(now())-1 DAY);

#当年最后一天:

SELECT concat(YEAR(now()),'-12-31');

#当前week的第一天:

select date_sub(curdate(),INTERVAL WEEKDAY(curdate()) + 1 DAY);

#当前week的最后一天:

select date_sub(curdate(),INTERVAL WEEKDAY(curdate()) - 5 DAY);

#前一week的第一天:

select date_sub(curdate(),INTERVAL WEEKDAY(curdate()) + 8 DAY);

#前一week的最后一天:

select date_sub(curdate(),INTERVAL WEEKDAY(curdate()) + 2 DAY);

#前两week的第一天:

select date_sub(curdate(),INTERVAL WEEKDAY(curdate()) + 15 DAY);

#前两week的最后一天:

select date_sub(curdate(),INTERVAL WEEKDAY(curdate()) + 9 DAY);

#当前month的第一天:

SELECT concat(date_format(LAST_DAY(now()),'%Y-%m-'),'01');

#当前month的最后一天:

SELECT LAST_DAY(now());

#前一month的第一天:

SELECT concat(date_format(LAST_DAY(now() - interval 1 month),'%Y-%m-'),'01');

#前一month的最后一天:

SELECT LAST_DAY(now() - interval 1 month);

#前两month的第一天:

SELECT concat(date_format(LAST_DAY(now() - interval 2 month),'%Y-%m-'),'01');

#前两month的最后一天:

SELECT LAST_DAY(now() - interval 2 month);

#当前quarter的第一天:

select concat(date_format(LAST_DAY(MAKEDATE(EXTRACT(YEAR FROM CURDATE()),1) + interval QUARTER(CURDATE())*3-3 month),'%Y-%m-'),'01');

#当前quarter的最后一天:

select LAST_DAY(MAKEDATE(EXTRACT(YEAR FROM CURDATE()),1) + interval QUARTER(CURDATE())*3-1 month);

#前一quarter的第一天:

select concat(date_format(LAST_DAY(MAKEDATE(EXTRACT(YEAR FROM CURDATE()),1) + interval QUARTER(CURDATE())*3-6 month),'%Y-%m-'),'01');

#前一quarter的最后一天:

select LAST_DAY(MAKEDATE(EXTRACT(YEAR FROM CURDATE()),1) + interval QUARTER(CURDATE())*3-4 month);

#前两quarter的第一天:

select concat(date_format(LAST_DAY(MAKEDATE(EXTRACT(YEAR FROM CURDATE()),1) + interval QUARTER(CURDATE())*3-9 month),'%Y-%m-'),'01');

#前两quarter的最后一天:

select LAST_DAY(MAKEDATE(EXTRACT(YEAR FROM CURDATE()),1) + interval QUARTER(CURDATE())*3-7 month);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值