文章目录
- 获取当前时间
- 获取当前日期
- 获取某日期或时间的日期格式
- 获取某一时间距当前时间的天数
- 提取日期时间中的年月日天等
- 对日期进行加减
- 获取当前日期时间的前一天和后一天
- 获取今天是这周的第几天
- 获取当前周的周一日期和周日日期
- 获取今天是这个月的第几天
- 获取本月第一天的日期
- 获取上个月的月初和月末日期
- 获取当前日期是这一年的第几天
- 获取上一年的年初和年末日期
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; #上一年年末