MySQL日期函数在开发中的一些应用


MySQL官方文档:https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html

获取当前时间
select now();
获取当前日期
select curdate(); #获取当前日期
select current_date(); #与上同
获取某日期或时间的日期格式
select date('2021-08-20 12:20:00'); #获取时间的日期
select date('2021-09-01'); #获取日期的日期
获取某一时间距当前时间的天数
select datediff(now(), '2000-01-01 00:00:00'); #日期相减返回的是天数
提取日期时间中的年月日天等
select extract(YEAR FROM  '2021-09-01');#提取年

extract(unit FROM date):EXTRACT() 函数用于返回日期/时间的单独部分,比如年、月、日、小时、分钟等等。

FROM :关键字

unit详解见:https://dev.mysql.com/doc/refman/8.0/en/expressions.html#temporal-intervals

对日期进行加减
 select date_add('2021-08-20 12:20:00', INTERVAL '1:2' MINUTE_SECOND); #日期加上指定格式时间
 select date_sub('2021-08-20 12:20:00', INTERVAL '1:2' MINUTE_SECOND); #日期减去指定格式时间

参数:date_***(date,INTERVAL expr unit)
date:日期时间
INTERVAL:关键字
expr:运算表达式,格式与后面的unit对应,可以少式,不可以多式
unit:详解见:https://dev.mysql.com/doc/refman/8.0/en/expressions.html#temporal-intervals

时间算术也可以在INTERVAL与+或 -运算符一起使用的,由此有另一种写法

select now() + INTERVAL '1' DAY;
select curdate() + INTERVAL '1' DAY;
select '2021-08-20 12:20:00' + INTERVAL '1:2' MINUTE_SECOND;
select '2021-08-20 12:20:00' - INTERVAL '1:2' MINUTE_SECOND;
获取当前日期时间的前一天和后一天
select now() + INTERVAL '1' DAY; #后一天时间
select now() - INTERVAL '1' DAY; #前一天时间
select curdate() + INTERVAL '1' DAY; #后一天日期
select curdate() - INTERVAL '1' DAY; #前一天日期
获取今天是这周的第几天
select if(date_format(curdate(), '%w') = 0, 7, date_format(curdate(), '%w'));

'%w':星期几(0=星期日… 6=星期六)由于周日是0,所以要用if()

函数:

if(1,2,3):与三元运算符'a?b:c'类似,如果1为true结果为2,为false结果为3

date_format(date,format):date:日期时间,formate:格式书说明符

​ formate详解见:https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html#function_date-format

获取当前周的周一日期和周日日期
select subdate(curdate(), if(date_format(curdate(), '%w') = 0, 7, date_format(curdate(), '%w'))-1); #当前周的周一日期
select subdate(curdate(), if(date_format(curdate(), '%w') = 0, 7, date_format(curdate(), '%w'))-7); #当前周的周日日期

subdate(date, INTERVAL expr unit):与date_sub()一样

subdate(date, days):此法中所用的是这个,从日期或日期时间表达式中减去的天数。

详解见:https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html#function_subdate

获取今天是这个月的第几天
select date_format(curdate(), '%d');
获取本月第一天的日期
select subdate(curdate(), date_format(curdate(),'%d')-1);
获取上个月的月初和月末日期
#获取上个月月初,思路:减去一月,然后减去当前日期中的日数
select curdate() - INTERVAL 1 MONTH - INTERVAL extract(DAY FROM now())-1 DAY;
#获取上个月月末,思路:减去当前日期中的日数,再减去一天
select curdate() - INTERVAL extract(DAY FROM now())-1+1 DAY;
#即:
select curdate() - INTERVAL extract(DAY FROM now()) DAY;
获取当前日期是这一年的第几天
select date_format(curdate(), '%j');
获取上一年的年初和年末日期
select curdate() - INTERVAL '1' YEAR - INTERVAL date_format(curdate(), '%j') DAY; #上一年年初
select curdate() - INTERVAL date_format(curdate(), '%j') DAY; #上一年年末
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值