1. 总览日期函数表 官网文档地址

名称 描述
ADDDATE() 将时间值(间隔)添加到日期值
ADDTIME() 加时间
CONVERT_TZ() 从一个时区转换到另一个时区
CURDATE() 返回当前日期
CURRENT_DATE(), CURRENT_DATE CURDATE()的同义词
CURRENT_TIME(), CURRENT_TIME CURTIME()的同义词
CURRENT_TIMESTAMP(), CURRENT_TIMESTAMP NOW()的同义词
CURTIME() 返回当前时间
DATE() 提取日期或日期时间表达式的日期部分
DATE_ADD() 将时间值(间隔)添加到日期值
DATE_FORMAT() 指定格式日期
DATE_SUB() 从日期中减去时间值(间隔)
DATEDIFF() 减去两个日期
DAY() DAYOFMONTH()的同义词
DAYNAME() 返回工作日的名称
DAYOFMONTH() 返回月份中的一天(0-31)
DAYOFWEEK() 返回参数的工作日索引
DAYOFYEAR() 返回一年中的某天(1-366)
EXTRACT() 提取部分日期
FROM_DAYS() 将天数转换为日期
FROM_UNIXTIME() 将Unix时间戳记格式化为日期
GET_FORMAT() 返回日期格式字符串
HOUR() 提取时间
LAST_DAY 返回参数的月份的最后一天
LOCALTIME(), LOCALTIME NOW()的同义词
LOCALTIMESTAMP, LOCALTIMESTAMP() NOW()的同义词
MAKEDATE() 从一年中的年月日创建日期
MAKETIME() 从小时,分钟,秒创建时间
MICROSECOND() 从参数返回微秒
MINUTE() 返回参数的分钟
MONTH() 返回经过日期的月份
MONTHNAME() 返回月份名称
NOW() 返回当前日期和时间
PERIOD_ADD() 在一年的月份中添加一个期间
PERIOD_DIFF() 返回期间之间的月数
QUARTER() 从日期参数返回季度
SEC_TO_TIME() 将秒转换为“ hh:mm:ss”格式
SECOND() 返回第二个(0-59)
STR_TO_DATE() 将字符串转换为日期
SUBDATE() 用三个参数调用时DATE_SUB()的同义词
SUBTIME() 减去时间
SYSDATE() 返回函数执行的时间
TIME() 提取传递的表达式的时间部分
TIME_FORMAT() 格式化为时间
TIME_TO_SEC() 将参数转换为秒
TIMEDIFF() 减去时间
TIMESTAMP() 仅使用一个参数,此函数将返回date或datetime表达式;有两个参数,参数的总和
TIMESTAMPADD() 向日期时间表达式添加间隔
TIMESTAMPDIFF() 从日期时间表达式中减去一个间隔
TO_DAYS() 返回日期参数转换为天
TO_SECONDS() 返回从Year 0开始转换为秒的date或datetime参数
UNIX_TIMESTAMP() 返回Unix时间戳
UTC_DATE() 返回当前UTC日期
UTC_TIME() 返回当前UTC时间
UTC_TIMESTAMP() 返回当前UTC日期和时间
WEEK() 返回星期数
WEEKDAY() 返回工作日索引
WEEKOFYEAR() 返回日期的日历周(1-53)
YEAR() 返回年份
YEARWEEK() 返回年和周

2. 函数功能分类例子

2.1 返回当前日期

  • CURDATE()、CURRENT_DATE()、CURRENT_DATE
  • 功能一致,格式统一 2020-04-07.
SELECT CURDATE();
-- 2020-04-07
SELECT CURRENT_DATE(); 
-- 2020-04-07
SELECT CURRENT_DATE;
-- 2020-04-07

2.2 返回当前时间

  • CURTIME、CURRENT_TIME()、CURRENT_TIME
  • 功能一致,格式统一 10:31:54
SELECT CURTIME();
-- 10:31:54
SELECT CURRENT_TIME(); 
-- 10:31:54
SELECT CURRENT_TIME;
-- 10:31:54

2.3 返回当前时间+日期

  • NOW()、CURRENT_TIMESTAMP()、CURRENT_TIMESTAMP
  • NOW() 的其他同义词
    • LOCALTIME
    • LOCALTIME()
    • LOCALTIMESTAMP
    • LOCALTIMESTAMP()
  • 功能一致,格式统一 2020-04-07 10:36:02.
SELECT NOW();
-- 2020-04-07 10:36:02
SELECT CURRENT_TIMESTAMP();
-- 2020-04-07 10:36:02
SELECT CURRENT_TIMESTAMP;
-- 2020-04-07 10:36:02

--
-- now() 的其他同义词
SELECT LOCALTIME();
SELECT LOCALTIME;
SELECT LOCALTIMESTAMP; 
SELECT LOCALTIMESTAMP()

2.4 返回计算后的时间(如:n天过后)

adddate()和date_add()一返回计算后的日期(后)

-- 如返回7天过后的日期
SELECT ADDDATE(CURRENT_DATE(), 7);
-- 2020-04-14
-- 如返回7天过前的日期
SELECT ADDDATE(CURRENT_DATE(), -7);
-- 2020-03-31

-- 注意这个函数的使用格式和上面那个函数不同,通常也更加倾向于上一个安徽省农户
SELECT DATE_ADD(CURRENT_DATE(), INTERVAL 7 DAY);
-- 2020-04-14

subdate()和date_sub()一返回计算后的日期(前)

SELECT DATE_SUB('2008-01-02', INTERVAL 31 DAY);
-- '2007-12-02'
SELECT SUBDATE('2008-01-02', INTERVAL 31 DAY);
-- '2007-12-02'
SELECT SUBDATE('2008-01-02 12:00:00', 31);
-- '2007-12-02 12:00:00'

subtime()一返回两个时间减后的时间

SELECT SUBTIME('2007-12-31 23:59:59.999999','1 1:1:1.000002');
-- '2007-12-30 22:58:58.999997'
SELECT SUBTIME('01:00:00.999999', '02:00:00.999998');
-- '-00:59:59.999999'

addtime()一返回计算后的时间+日期

SELECT ADDTIME('2007-12-31 23:59:59.999999', '1 1:1:1.000002');
-- '2008-01-02 01:01:01.000001'
SELECT ADDTIME('01:00:00.999999', '02:00:00.999998');
-- '03:00:01.999997'

-- 返回7天过后的时间+日期
SELECT ADDTIME(NOW(), '7 00:00:00');
-- 2020-04-14 10:54:19

-- 返回7天之前的时间+日期
SELECT ADDTIME(NOW(), '-7 00:00:00');
-- 2020-03-31 10:53:59

-- 返回距离7天后还有多长是阿金
SELECT ADDTIME(CURRENT_DATE(), '7 00:00:00');
-- 168:00:00

timediff()一返回两个时间差,以时间表示

SELECT TIMEDIFF('2000:01:01 00:00:00', '2000:01:01 00:00:00.000001');
-- '-00:00:00.000001'
SELECT TIMEDIFF('2008-12-31 23:59:59.000001', '2008-12-30 01:01:01.000002');
-- '46:58:57.999999'

timestamp()

SELECT TIMESTAMP('2003-12-31');
-- '2003-12-31 00:00:00'
SELECT TIMESTAMP('2003-12-31 12:00:00','12:00:00');
-- '2004-01-01 00:00:00'

timestampadd()

SELECT TIMESTAMPADD(MINUTE, 1, '2003-01-02');
-- '2003-01-02 00:01:00'
SELECT TIMESTAMPADD(WEEK, 1, '2003-01-02');
-- '2003-01-09'

timestampdiff()

SELECT TIMESTAMPDIFF(MONTH,'2003-02-01','2003-05-01');
-- 3
SELECT TIMESTAMPDIFF(YEAR,'2002-05-01','2001-01-01');
-- -1
SELECT TIMESTAMPDIFF(MINUTE,'2003-02-01','2003-05-01 12:05:55');
-- 128885

2.5 返回提取后的结果(年月日、时分秒)

date()一提取日期/日期表达式中的日期部分

SELECT DATE('2003-12-31 01:02:03');
-- '2003-12-31'

time()一提取日期/日期表达式中的时间部分

SELECT TIME('2003-12-31 01:02:03');
        -> '01:02:03'

year()一提取日期/日期表达式中的年

SELECT YEAR('2003-12-31 01:02:03');
--  2003

month()一提取日期/日期表达式中的月

SELECT MONTH('2003-12-31 01:02:03');
--  12

day()一提取日期/日期表达式中的日

SELECT DAY('2003-12-31 01:02:03');
-- 31

SELECT DAYOFMONTH('2003-12-31 01:02:03');
-- 31

hour()一提取日期/日期表达式中的时

SELECT HOUR('2003-12-31 01:02:03')

minute()一提取日期/日期表达式中的分

SELECT MINUTE('2003-12-31 01:02:03')

second()一提取日期/日期表达式中的秒

SELECT SECOND('2003-12-31 01:02:03')

2.6 时间日期格式化函数

date_format()

time_format()


2.7 其他日期函数

makedate()一创建日期

SELECT MAKEDATE(2011,31), MAKEDATE(2011,32);
-- '2011-01-31', '2011-02-01'
SELECT MAKEDATE(2011,365), MAKEDATE(2014,365);
-- '2011-12-31', '2014-12-31'
SELECT MAKEDATE(2011,0);
-- NULL

maketime()一创建时间

SELECT MAKETIME(12,15,30);
-- '12:15:30'

monthname()一返回月份的英文名称

SELECT MONTHNAME('2008-02-03');
-- 'February'

quarter()一返回季度(1~4)

SELECT QUARTER('2008-04-01');
--- 2

to_day()一返回子 0000-01-00 到传入参数的天数

SELECT TO_DAYS('0000-01-07')
-- 7

-- 如计算两个日期之间相隔的天数
SELECT TO_DAYS('2020-01-07') - TO_DAYS('2020-01-03')
-- 4

to_seconds()一给定日期或日期时间,返回自0年以来的秒数

SELECT TO_SECONDS(950501);
-- 62966505600
SELECT TO_SECONDS('2009-11-29');
--63426672000
SELECT TO_SECONDS('2009-11-29 13:43:32');
-- 63426721412
SELECT TO_SECONDS( NOW() );
-- 63426721458

week()一返回星期数,几乎不用

SELECT WEEK('2020-04-07');
-- 7

weekday()一返回星期几

SELECT WEEKDAY('2020-04-07');
-- 1
-- 返回date (0=星期一,1=星期二,… 6=星期日)的工作日索引。