最近写个SQL逻辑,涉及到计算各种日期和时间,MySQL提供了很丰富的函数来支持,记录一下,用的时候,有地方可查。

获取当前日期select curdate(); 
获取当月最后一天select last_day(curdate());
获取本月第一天select DATE_ADD(curdate(),interval -day(curdate())+1 day);
上月第一天select date_add(curdate()-day(curdate())+1,interval -1 month);
上月最后一天select last_day(date_sub(now(),interval 1 month));
获取下个月的第一天select date_add(curdate()-day(curdate())+1,interval 1 month);
下月最后一天select last_day(date_sub(now(),interval -1 month));
获取当前月的天数select DATEDIFF(date_add(curdate()-day(curdate())+1,interval 1 month ),DATE_ADD(curdate(),interval -day(curdate())+1 day)) from dual;select day(last_day(curdate()));
查询当前年份新增数据select * from test where YEAR(create_time) = YEAR(NOW())
查询当去年份新增数据select * from test where YEAR(create_time) = YEAR(NOW())-1
查询当前季度新增数据select * from test where QUARTER(create_time) = QUARTER(NOW()) AND YEAR (create_time) = YEAR (NOW())
查询上个季度新增数据select * from test where QUARTER(create_time) = QUARTER(DATE_SUB(now(),interval 1 QUARTER))
查询本月新增数据select * from test where DATE_FORMAT( create_time, '%Y%m' ) = DATE_FORMAT( CURDATE( ) , '%Y%m' )
查询上个月新增数据select * from test where DATE_FORMAT(create_time,'%Y%m') = DATE_FORMAT(DATE_SUB(curdate(), interval 1 MONTH),'%Y%m')
得到上一季度DATE_SUB(CURDATE(),interval 1 QUARTER)
今天是当月的第几天SELECT DAYOFMONTH(NOW());
上月今天的当前日期select date_sub(curdate(), interval 1 month);
上月今天的当前时间(时间戳)select unix_timestamp(date_sub(now(),interval 1 month));
获取当前时间与上个月之间的天数select datediff(curdate(), date_sub(curdate(), interval 1 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);

DATE_FORMAT():函数用于以不同的格式显示日期/时间数据,

语法:DATE_FORMAT(date,format)date,参数是合法的日期format,规定日期/时间的输出格式。%a 缩写星期名%b 缩写月名%c 月,数值%D 带有英文前缀的月中的天%d 月的天,数值(00-31)%e 月的天,数值(0-31)%f 微秒%H 小时 (00-23)%h 小时 (01-12)%I 小时 (01-12)%i 分钟,数值(00-59)%j 年的天 (001-366)%k 小时 (0-23)%l 小时 (1-12)%M 月名%m 月,数值(00-12)%p AM 或 PM%r 时间,12-小时(hh:mm:ss AM 或 PM)%S 秒(00-59)%s 秒(00-59)%T 时间, 24-小时 (hh:mm:ss)%U 周 (00-53) 星期日是一周的第一天%u 周 (00-53) 星期一是一周的第一天%V 周 (01-53) 星期日是一周的第一天,与 %X 使用%v 周 (01-53) 星期一是一周的第一天,与 %x 使用%W 星期名%w 周的天 (0=星期日, 6=星期六)%X 年,其中的星期日是周的第一天,4 位,与 %V 使用%x 年,其中的星期一是周的第一天,4 位,与 %v 使用%Y 年,4%y 年,2

QUARTER():函数返回给定日期值(1到4之间的数字)的一年中的季度,

语法:QUARTER(date)date,必须项。从中提取季度的日期或日期时间

返回值,

月份返回值

1~3月

1

4~6月

2

7~9月

3

10~12月

4

INTERVAL,

(1)当函数使用时mysql获取当前时间,即interval()为比较函数,例如:interval(10,1,3,5,7); 结果为4。

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

(2)当关键词使用时,表示为设置时间间隔,常用在date_add()与date_sub()函数里,例如:interval 1 day ,解释为将时间间隔设置为1天。

参考资料,

如果您认为这篇文章有些帮助,还请不吝点下文章末尾的”点赞”和”在看”mysql获取当前时间,或者直接转发pyq,

近期更新的文章:

《》

《》

《》

《》

《》

近期的热文:

《》

《》

文章分类和索引:

限时特惠:本站每日持续更新海量展厅资源,一年会员只需29.9元,全站资源免费下载
站长微信:zhanting688