最近写个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
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。