大家好,我是犀牛真皮,废话不多刷,今天来水一波MySql的日期函数。
最近在看mysql的基础知识,我们知道mysql的时间函数真是太多了,这里稍微总结下基本的日期函数有哪些,以及用法示例。
1、获取日期或时间的函数:
NOW()、SYSDATE() 返回指定日期
SELECT NOW(),SYSDATE();
+---------------------+---------------------+
| NOW() | SYSDATE() |
+---------------------+---------------------+
| 2021-07-18 23:23:40 | 2021-07-18 23:23:40 |
+---------------------+---------------------+
CURDATE() 、CURRENT_DATE() 获取当前日期
CURRENT_TIME()、CURTIME() 获取当前时间
CURRENT_TIMESTAMP() 获取当前日期和时间
YEAR(d)、MONTH(d)、WEEK(d)、DAY(d) 返回当前日期d的年份、月份、周数、天数
- select YEAR(now()),MONTH(now()),WEEK(now()),DAY(now());
HOUR(t)、MINUTE(t)、SECOND(t) 返回t中的时、分、秒
- select HOUR(curtime()),MINUTE(curtime()),SECOND(curtime());
DAYNAME(d) 返回日期d的星期几
DAYOFMONTH(d) 返回d是当前月份的第几天
DAYOFWEEK(d) 返回日期d是星期几,注意返回的是数字(1 表示星期日,2 表示星期一,以此类推)
DAYOFYEAR(d) 返回日期d是本年的第几天
- select DAYNAME(sysdate()),DAYOFMONTH(sysdate()),DAYOFWEEK(sysdate()),DAYOFYEAR(sysdate());
WEEKDAY(d) 计算日期d是星期几,注意返回的数字( 日期 d 是星期几,0 表示星期一,1 表示星期二,以此类推)
- select WEEKDAY(now());
FROM_DAYS(n) 返回从0000-01-01开始到n天的日期
- SELECT FROM_DAYS(733333);
TO_DAYS(d) 返回从0000-01-01开始到n天的日期
- select TO_DAYS(NOW());
LAST_DAY(d) 返回日期d这月的最后一天的日期
- select LAST_DAY(now());
LOCALTIME()、LOCALTIMESTAMP() 返回当前的日期和时间
- select LOCALTIME(),LOCALTIMESTAMP();
QUARTER(d) 返回日期d是第几季度
- select QUARTER(CURDATE())
TIME(expr) 提取传入表达式的时间部分
- select TIME(NOW());
2、计算日期或者时间的函数:
ADDDATE(d, n) 计算日期d加上n的日期
ADDTIME(t, n) 计算时间t加上时间表达式n的时间
DATE() 从日期或者日期时间表达式中提取出日期
DATEDIFF(d1, d2) 计算d1-d2的相差天数
DATE_ADD(d, INTERVAL expr type) 计算起始日期 d 加上一个时间段后的日期,type的类型支持YEAR、MONTH、DAY、MINUTE、SECOND、QUARTER等等
DATE_SUB(date,INTERVAL expr type) 减去指定日期的时间间隔
- select DATE_SUB(CURDATE(),INTERVAL 2 day);
3、格式化日期或时间的函数:
DATE_FOTMAT(d, f) 按表达式f的要求格式化日期d
- select DATE_FORMAT(SYSDATE(),'%Y-%m-%d %r');
TIME_FORMAT(t, f) 按表达式f的要求格式化时间t
- select TIME_FORMAT(curtime(),'%r');
EXTRACT(type FROM d) 从日期d中获取指定的值,并返回指定的type类型
- select extract(day from now());
MAKEDATE(year,day-of-year) 基于给定参数年份year和当年第day天的日期
- select MAKEDATE(2021,32);
MAKETIME(hour,minute,second) 组合指定的时分秒
- SELECT MAKETIME(12,33,56);
PERIOD_ADD(period,number) 返回日期为年月period加上月份number的日期
- SELECT PERIOD_ADD(201707,4);
PERIOD_DIFF(period1,period2) 返回两个时间段的月份差
- select PERIOD_DIFF(202107,202103);
TIMEDIFF(t1,t2) 计算时间t1-t2的差值
- select TIMEDIFF('23:11:12','22:34:55');
SEC_TO_TIME(s) 返回s秒转换为时分秒格式的时间
- SELECT SEC_TO_TIME(12345);
TIME_TO_SEC(t) 将时间t转换为秒
- SELECT TIME_TO_SEC(curtime());
STR_TO_DATE(String, format_mask) 将字符串转为日期
- select STR_TO_DATE('July 18 2021','%M %d %Y');
SUBDATE(d, n) 返回日期d减去天数n的日期
- select SUBDATE(CURDATE(),60);
SUBTIME(t, n) 返回时间d减去n秒的时间
- SELECT SUBTIME('2021-07-18 23:02:33',6);
TIMESTAMP(expression, interval) 一个参数时返回当前日期或时间,两个参数时,相加展示
- SELECT TIMESTAMP(CURDATE().CURTIME());
WEEKOFYEAR(d) 计算日期d时本年度的第几个星期,范围在0-53
- SELECT WEEKOFYEAR(now());