1. 获取当前日期和时间
select now();
2. 获取当期日期,不包括时间
select current_date(),curdate();
3. 获取当前时间,不包括日期
select current_time(),curtime();
4. 获取当前时间戳
select unix_timestamp();
5. 获取指定日期的时间戳
select unix_timestamp('20170221');
6. 获取指定日期的年份,月份,第几周,天数
select year(now()),month(now()),weekofyear(now()),dayofyear(now());
每个函数中的参数now()表示当前日期。
7. 提取指定日期中的小时
select hour(now());
8. 日期格式化
select date_format('2017-02-21 11:12:01', '%Y%m%d%H%i%s');
9. 将时间戳格式化为日期
select from_unixtime(1487646810,'%Y-%m-%d %H:%i:%s');
10. 日期拼凑
select makedate(2017,52);
makedate函数的第一个参数表示年份,第二个参数表示一年中的第几天。
11. 时间拼凑
select maketime(11,20,30);
maketime函数的第一个参数表示小时,第二个参数表示分钟,第三个参数表示秒数。
12. 日期加减
select date_add(now(), interval 1 year);
date_add函数的第一个参数表示要加减的日期,第二个参数是一个表达式,表达式中的interval是一个固定关键词,后面需带上具体的日期间隔,包含单位。
sql语句中的单位year可以替换为下面的任何一个选项:
year:年份
quarter:季度
month:月份
week:周数
day:天数
hour:小时
minute:分钟
second:秒数
microsecond:微秒
注意:日期间隔中的数字可以为负数,表示做减法操作。
13. 计算两个日期的差值
select datediff(now(), '20161120');
datediff函数只能计算两个日期(date)之间相差的天数,如果想指定差值类型,请使用timestampdiff函数。
14. 计算两个日期的差值(指定差值类型)
select timestampdiff(month, '20161120', now());
timestampdiff函数的第一个参数表示差值类型,后面两个参数表示要进行计算的日期,计算规则是:拿最后一个参数表示的日期,减去前面一个参数表示的日期。
sql语句中的单位year可以替换为下面的任何一个选项:
year:年份
quarter:季度
month:月份
week:周数
day:天数
hour:小时
minute:分钟
second:秒数
microsecond:微秒
15. 返回某个日期的该月最后一天的日期
select last_day('20170221');
16. 获取当年第一天、最后一天
select date_sub(curdate(),interval dayofyear(now())-1 day) as first_day,
concat(year(now()),'-12-31') as last_day;
17. 获取当前周的第一天
这个取决于对第一天的定义,如果设定周日为第一天,请用下面的语句:
select date_sub(curdate(),interval weekday(curdate())+1 day);
如果设定周一为第一天,请用下面的语句:
select date_sub(curdate(),interval weekday(curdate()) day);
计算公式:
此处假定周一为每一周的第一天。
select date_sub(curdate(),interval weekday(curdate()) + N*7 day);
其中,变量N表示前几周,为0时表示当前周。
18. 获取当前周的最后一天
这个取决于对最后一天的定义,如果设定周六为最后一天,请用下面的语句:
select date_sub(curdate(),interval weekday(curdate()) - 5 day);
如果设定周日为最后一天,请用下面的语句:
select date_sub(curdate(),interval weekday(curdate()) - 6 day);
计算公式:
此处假定周日为每一周的最后一天。
select date_sub(curdate(),interval weekday(curdate()) + N*7 - 6 day);
其中,变量N表示前几周,为0时表示当前周。
19. 获取当前月的第一天
select concat(date_format(last_day(now()),'%Y-%m-'),'01');
计算公式:
select concat(date_format(last_day(now() - interval N month),'%Y-%m-'),'01');
其中,变量N表示前面第几个月,为0时表示当前月。
20. 获取当前月的最后一天
select last_day(now());
计算公式:
select last_day(now() - interval N month);
其中,变量N表示前面第几个月,为0时表示当前月。
21. 获取当前季度的第一天
select concat(date_format(last_day(makedate(extract(year from curdate()),1) + interval quarter(curdate())*3-3 month),'%Y-%m-'),'01');
计算公式:
select concat(date_format(last_day(makedate(extract(year from curdate()),1) + interval quarter(curdate())*3-3*(N+1) month),'%Y-%m-'),'01');
其中,变量N表示前面第几个季度,为0时表示当前季度。
22. 获取当前季度的最后一天
select last_day(makedate(extract(year from curdate()),1) + interval quarter(curdate())*3-1 month);
计算公式:
select last_day(makedate(extract(year from curdate()),1) + interval quarter(curdate())*3-1-N*3 month);
其中,变量N表示前面第几个季度,为0时表示当前季度。