MySQL的时间函数用于处理日期和时间数据。以下是一些常用的MySQL时间函数。
内容有点多,建议收藏以备后续用到查阅参考。
目录
语法:
NOW(M)
参数说明:
示例:
- mysql> SELECT NOW(), NOW()+1, NOW(6), NOW(6)+1;
- +---------------------+----------------+---------------------------+-----------------------+
- | NOW() | NOW()+1 | NOW(6) | NOW(6)+1 |
- +---------------------+-----------------------+--------------------+-----------------------+
- | 2023-10-22 10:04:04 | 20231022100405 | 2023-10-22 10:04:04.485897| 20231022100405.485897 |
- +---------------------+-----------------------+--------------------+-----------------------+
说明:
NOW() 的结果为 YYYY-MM-DD hh:mm:ss 格式。NOW() + 0 的结果为 YYYYMMDDhhmmss 格式。NOW() + M 意味着当前时间加上 M 秒。+ M 均为当前时间格式上加 M 秒。NOW()获取当前日期时间外,还有:(语法和使用均与NOW()相似)
- mysql> SELECT CURDATE(), CURDATE()+1;
- +---------------------+-----------------------+
- | CURDATE() | CURDATE()+1 |
- +---------------------+-----------------------+
- | 2023-10-22 | 20231023 |
- +---------------------+-----------------------+
说明:
CURDATE()的结果为 YYYY-MM-DD 格式。CURDATE() + 0 的结果为 YYYYMMDD 格式。CURDATE() + N 意味着当前日期加上一个数字。+ N 意味着当前日期加上一个数字)
语法:
CURTIME(M)
参数说明:
示例:
- mysql> SELECT CURTIME(), CURTIME() + 1, CURTIME(6), CURTIME(6) + 1;
- +---------------------+-----------------------+------------------+
- | CURDATE() | CURDATE() + 1 | CURTIME(6) | CURTIME(6) + 1 |
- +---------------------+-----------------------+------------------+
- | 18:51:58 | 185159 | 18:51:58.994696 | 185159.994696 |
- +---------------------+-----------------------+------------------+
说明:
CURTIME() 的结果为 hh:mm:ss 格式。CURTIME() + 0 的结果为 hhmmss 格式。NOW() + M 意味着当前时间加上 M 秒。+ M 均为当前时间格式上加 M 秒注:UTC日期时间与上述日期时间输出格式相同(减8个小时)有
因为我国位于东八时区,所以本地时间 = UTC 时间 + 8 小时。UTC 时间在业务涉及多个国家和地区的时候,非常有用。
MySQL EXTRACT() 函数从指定的日期/时间中提取指定的部分并返回。
语法:
EXTRACT(unit FROM date)
参数说明:
YEAR 年QUARTER 季MONTH 月WEEK 周DAY 日HOUR 时MINUTE 分SECOND 秒MICROSECOND 微秒YEAR_MONTH 年+月DAY_HOUR 日+时DAY_MINUTE 日+时+分DAY_SECOND 日+时+分+秒DAY_MICROSECOND 日+时+分+秒+微秒HOUR_MINUTE 时+分HOUR_SECOND 时+分+秒HOUR_MICROSECOND 时+分+秒+微秒MINUTE_SECOND 分+秒MINUTE_MICROSECOND 分+秒+微秒SECOND_MICROSECOND 秒+微秒返回值:
NULL情况:
NULL。示例:
- mysql> set @date = NOW(6);
- mysql> SELECT @date;
- +---------------------+-----------------------+
- | @date |
- +---------------------+-----------------------+
- | 2023-10-22 18:07:46.304775 |
- +---------------------+-----------------------+
-
- SELECT EXTRACT(YEAR FROM @date); -- 2023
- SELECT EXTRACT(QUARTER FROM @date); -- 4
- SELECT EXTRACT(MONTH FROM @date); -- 10
- SELECT EXTRACT(WEEK FROM @date); -- 43
- SELECT EXTRACT(DAY FROM @date); -- 22
- SELECT EXTRACT(HOUR FROM @date); -- 8
- SELECT EXTRACT(MINUTE FROM @date); -- 7
- SELECT EXTRACT(SECOND FROM @date); -- 46
- SELECT EXTRACT(MICROSECOND FROM @date); -- 304775
-
- SELECT EXTRACT(YEAR_MONTH FROM @date); -- 202310
- SELECT EXTRACT(DAY_HOUR FROM @date); -- 2218
- SELECT EXTRACT(DAY_MINUTE FROM @date); -- 221807
- SELECT EXTRACT(DAY_SECOND FROM @date); -- 22180746
- SELECT EXTRACT(DAY_MICROSECOND FROM @date); -- 22180746304775
- SELECT EXTRACT(HOUR_MINUTE FROM @date); -- 807
- SELECT EXTRACT(HOUR_SECOND FROM @date); -- 80746
- SELECT EXTRACT(HOUR_MICROSECOND FROM @date); -- 80746304775
- SELECT EXTRACT(MINUTE_SECOND FROM @date); -- 746
- SELECT EXTRACT(MINUTE_MICROSECOND FROM @date); -- 746304775
- SELECT EXTRACT(SECOND_MICROSECOND FROM @date); -- 46304775
MySQL WEEK() 函数返回给定日期位于当年的第几周。
语法:
- WEEK(date)
- WEEK(date, mode)
参数说明:
返回值:
0 到 53。NULL。mode 参数的处理逻辑如下:
- Mode 每周的第一天 返回值范围 对第一周的要求
- 0 星期天 0-53
- 1 星期一 0-53 在本年至少 4 天
- 2 星期天 1-53
- 3 星期一 1-53 在本年至少 4 天
- 4 星期天 0-53 在本年至少 4 天
- 5 星期一 0-53
- 6 星期天 1-53 在本年至少 4 天
- 7 星期一 1-53
示例:
- SELECT
- WEEK('2023-01-01'), -- 1
- WEEK('2023-01-01', 0), -- 1
- WEEK('2023-01-03', 0), -- 1
- WEEK('2023-01-01', 1), -- 0
- WEEK('2023-01-03', 1), -- 1
- WEEK('2023-01-01', 2), -- 1
- WEEK('2023-01-03', 2), -- 1
- WEEK('2023-01-01', 3), -- 52
- WEEK('2023-01-03', 3), -- 1
- WEEK('2023-01-01', 4), -- 1
- WEEK('2023-01-03', 4), -- 1
- WEEK('2023-01-01', 5), -- 0
- WEEK('2023-01-03', 5), -- 1
- WEEK('2023-01-01', 6), -- 1
- WEEK('2023-01-03', 6), -- 1
- WEEK('2023-01-01', 7), -- 52
- WEEK('2023-01-03', 7) -- 1
MySQL WEEKDAY() 函数返回给定日期的工作日编号。
语法:
WEEKDAY(date)
参数说明:
返回值:
NULL 情况:
NULL。示例:
- SELECT
- WEEKDAY('2023-10-21'), -- 5
- WEEKDAY('2023-10-22'), -- 6
- WEEKDAY('2023-10-23'), -- 0
- WEEKDAY('2023-10-24'), -- 1
- WEEKDAY('2023-10-25'), -- 2
- WEEKDAY('2023-10-26'), -- 3
- WEEKDAY('2023-10-27') -- 4
MySQL WEEKOFYEAR() 函数返回给定日期位于当年的第几周。该函数相当于WEEK(date,3)。
语法:
WEEKOFYEAR(date)
参数说明:
返回值:
1 到 53。该函数的前提是“一周的第一天是星期一,并且一年中的第一周有 3 天以上”,它相当于 WEEK(date,3)。NULL 情况:
NULL。示例:
- SELECT WEEKOFYEAR('2023-01-01'), -- 52(2023年第一周只有2天)
- WEEKOFYEAR('2023-01-02'), -- 1
- WEEKOFYEAR('2023-01-03'), -- 1
- WEEKOFYEAR('2024-01-01'), -- 1 (2024年第一周大于3天)
- WEEKOFYEAR('2024-01-02'), -- 1
- WEEKOFYEAR('2024-01-03'); -- 1
mode 参数,WEEK() 默认将使用 default_week_format 变量的值。default_week_format 变量的值。
- mysql> SHOW VARIABLES LIKE 'default_week_format';;
- +---------------------+-----------------+
- | Variable | Value |
- +---------------------+-----------------+
- | default_week_format | 0 |
- +---------------------+-----------------+
MySQL YEARWEEK() 函数返回一个表示给定日期所在年份和第几周的数字。此函数与 WEEK() 类似。
语法:
- YEARWEEK(date)
- YEARWEEK(date, mode)
参数说明:
返回值:
NULL 情况
NULL。 mode 参数的处理逻辑如下:
- Mode 每周的第一天 返回值范围 对第一周的要求
- 0 星期天 0-53
- 1 星期一 0-53 在本年至少 4 天
- 2 星期天 1-53
- 3 星期一 1-53 在本年至少 4 天
- 4 星期天 0-53 在本年至少 4 天
- 5 星期一 0-53
- 6 星期天 1-53 在本年至少 4 天
- 7 星期一 1-53
示例:
- SELECT
- YEARWEEK('2023-01-01'), -- 202301
- YEARWEEK('2023-01-01', 0), -- 202301
- YEARWEEK('2023-01-03', 0), -- 202301
- YEARWEEK('2023-01-01', 1), -- 202252
- YEARWEEK('2023-01-03', 1), -- 202301
- YEARWEEK('2023-01-01', 2), -- 202301
- YEARWEEK('2023-01-03', 2), -- 202301
- YEARWEEK('2023-01-01', 3), -- 202252
- YEARWEEK('2023-01-03', 3), -- 202301
- YEARWEEK('2023-01-01', 4), -- 202301
- YEARWEEK('2023-01-03', 4), -- 202301
- YEARWEEK('2023-01-01', 5), -- 202252
- YEARWEEK('2023-01-03', 5), -- 202301
- YEARWEEK('2023-01-01', 6), -- 202301
- YEARWEEK('2023-01-03', 6), -- 202301
- YEARWEEK('2023-01-01', 7), -- 202352
- YEARWEEK('2023-01-03', 7) -- 202301
mode 参数,WEEK() 默认将使用 default_week_format 变量的值。default_week_format 变量的值。
- mysql> SHOW VARIABLES LIKE 'default_week_format';;
- +---------------------+-----------------+
- | Variable | Value |
- +---------------------+-----------------+
- | default_week_format | 0 |
- +---------------------+-----------------+
MySQL DAY() 函数返回日期时间表达式中的代表月份中的一天的数字。此函数等同于 DAYOFMONTH() 函数。
语法:
DAY(expr)
参数说明:
返回值:
NULL情况:
NULL。示例:
- SELECT
- DAY('2023-10-22'), -- 22
- DAY('2023-10-22 18:10:10'), -- 22
- DAY(NOW()), -- 22
- DAY('2023-02-00'), -- 0
- DAY('2023-02-30'), -- NULL
- DAY('Not A DATE'), -- NULL
- DAY(NULL) -- NULL
MySQL DAYNAME() 函数返回给定日期的工作日名称。
语法:
DAYNAME(expr)
参数说明:
返回值:
Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday。NULL情况:
NULL。示例:
- SELECT
- DAYNAME('2023-10-22'), -- Sunday
- DAYNAME('2023-10-23'), -- Monday
- DAYNAME('2023-10-24'), -- Tuesday
- DAYNAME('2023-10-25'), -- Wednesday
- DAYNAME('2023-10-26'), -- Thursday
- DAYNAME('2023-10-27'), -- Friday
- DAYNAME('2023-10-28'), -- Saturday
- DAYNAME(NOW()), -- Sunday
- DAYNAME('2023-02-00'), -- NULL
- DAYNAME('2023-02-30'), -- NULL
- DAYNAME('Not A DATE'), -- NULL
- DAYNAME(NULL) -- NULL
MySQL DAYOFMONTH() 函数返回日期时间表达式中的代表月份中的一天的数字。此函数等同于 DAY() 函数。
语法:
DAYOFMONTH(expr)
参数说明:
返回值:
'0000-00-00' 和 '2008-00-00',DAYOFMONTH() 函数将返回 0。返回 NULL情况:
NULL示例:
- SELECT
- DAYOFMONTH('2023-10-22'), -- 22
- DAYOFMONTH('2023-10-22 11:11:11'), -- 22
- DAYOFMONTH(NOW()), -- 22
- DAYOFMONTH('2023-02-00'), -- 0
- DAYOFMONTH('2023-02-30'), -- NULL
- DAYOFMONTH('Not A DATE'), -- NULL
- DAYOFMONTH(NULL) -- NULL
MySQL DAYOFWEEK() 函数返回给定日期的工作日的索引。
语法:
DAYOFWEEK(expr)
参数说明:
返回值:
1 到 7 之间的数字,代表的含义如下:
NULL情况:
NULL示例:
- SELECT
- DAYOFWEEK('2023-10-21'), -- 7
- DAYOFWEEK('2023-10-22'), -- 1
- DAYOFWEEK('2023-10-23'), -- 2
- DAYOFWEEK('2023-10-24'), -- 3
- DAYOFWEEK('2023-10-25'), -- 4
- DAYOFWEEK('2023-10-26'), -- 5
- DAYOFWEEK('2023-10-27'), -- 6
- DAYOFWEEK(NOW()), -- 7
- DAYOFWEEK('2023-02-00'), -- NULL
- DAYOFWEEK('2023-02-30'), -- NULL
- DAYOFWEEK('Not A DATE'), -- NULL
- DAYOFWEEK(NULL) -- NULL
MySQL DAYOFYEAR() 函数返回一个从 1 到 366 代表给定日期是一年中的第几天的数字。
语法:
DAYOFYEAR(expr)
参数说明:
返回值:
1 到 366 代表给定日期是一年中的第几天的数字。NULL情况:
NULL。示例:
- SELECT
- DAYOFYEAR('2023-10-21'), -- 294
- DAYOFYEAR('2023-10-22'), -- 295
- DAYOFYEAR(NOW()), -- 294
- DAYOFWEEK('2023-02-00'), -- NULL
- DAYOFWEEK('2023-02-30'), -- NULL
- DAYOFWEEK('Not A DATE'), -- NULL
- DAYOFWEEK(NULL) -- NULL
MySQL FROM_DAYS() 函数将指定的天数转为日期并返回。FROM_DAYS() 函数与 TO_DAYS() 函数是相反的。
语法:
FROM_DAYS(days)
参数说明:
返回值:
NULL情况:
NULL。示例:
- SELECT
- FROM_DAYS(739179), -- 2023-10-21
- FROM_DAYS(739180); -- 2023-10-22
MySQL TO_DAYS() 函数将指定日期转为距离 0 年的天数并返回。TO_DAYS() 函数与 FROM_DAYS() 函数是相反的。
语法:
TO_DAYS(date)
参数说明:
返回值:
NULL情况:
NULL。示例:
- SELECT
- TO_DAYS('2023-10-21'), -- 739179
- TO_DAYS(now()); -- 739180
MySQL LAST_DAY() 函数返回指定的日期或者日期时间所在当月的最后一天。
语法:
LAST_DAY(date)
参数说明:
返回值:
NULL情况:
NULL。示例:
- SELECT
- LAST_DAY('2019-02-01'), -- 2019-02-28
- LAST_DAY('2020-02-01'), -- 2020-02-28
- LAST_DAY('2021-02-01'), -- 2021-02-28
- LAST_DAY('2022-02-01'), -- 2022-02-28
- LAST_DAY('2023-02-01 10:11:12'), -- 2023-02-28
- LAST_DAY(NOW()) -- 2023-10-31
MySQL DATE() 函数从日期时间表达式中提取日期部分并返回。
语法:
DATE(expr)
参数说明:
返回值:
NULL情况:
NULL。示例:
- SELECT
- DATE('2023-10-22'), -- 2023-10-22
- DATE('2023-10-22 11:11:11'), -- 2023-10-22
- DATE(NOW()), -- 2023-10-22
- DATE('2023-02-30'), -- NULL
- DATE('Not A Date'), -- NULL
- DATE(NULL) -- NULL
MySQL DATE_ADD() 函数在指定的日期/时间上加上指定到时间间隔加并返回新的日期/时间。
语法:
DATE_ADD(date, INTERVAL value unit)
参数说明:
YEAR 年QUARTER 季MONTH 月WEEK 周DAY 日HOUR 时MINUTE 分SECOND 秒MICROSECOND 微秒YEAR_MONTH DAY_HOUR DAY_MINUTE DAY_SECOND DAY_MICROSECOND HOUR_MINUTE HOUR_SECOND HOUR_MICROSECOND MINUTE_SECOND MINUTE_MICROSECOND SECOND_MICROSECOND 返回值:
DATE:如果 date 参数是 DATE 类型,并且时间间隔为 YEAR, MONTH 或者 DAY。DATETIME:
date 参数是 DATE 类型,并且时间间隔为 HOURS, MINUTES 或者 SECONDS。date 参数是 DATETIME 类型。date 参数是 TIME 类型,并且时间间隔为 YEAR, MONTH 或者 DAY。TIME:返回 TIME。示例:
- SELECT
- NOW(6), -- 2023-10-22 12:33:16.021752
- DATE_ADD(NOW(6), INTERVAL 5 YEAR), -- 2028-10-22 12:33:16.021752
- DATE_ADD(NOW(6), INTERVAL 5 QUARTER), -- 2025-01-22 12:33:16.021752
- DATE_ADD(NOW(6), INTERVAL 5 MONTH), -- 2024-03-22 12:33:16.021752
- DATE_ADD(NOW(6), INTERVAL 5 WEEK), -- 2023-11-25 12:33:16.021752
- DATE_ADD(NOW(6), INTERVAL 5 DAY), -- 2023-10-26 12:33:16.021752
- DATE_ADD(NOW(6), INTERVAL 5 HOUR), -- 2023-10-22 17:33:16.021752
- DATE_ADD(NOW(6), INTERVAL 5 MINUTE), -- 2023-10-22 12:38:16.021752
- DATE_ADD(NOW(6), INTERVAL 5 SECOND), -- 2023-10-22 12:33:21.021752
- DATE_ADD(NOW(6), INTERVAL 5 MICROSECOND), -- 2023-10-22 12:33:16.021757
- DATE_ADD(NOW(6), INTERVAL 5 YEAR_MONTH), -- 2024-03-22 12:33:16.021752
- DATE_ADD(NOW(6), INTERVAL 5 DAY_HOUR), -- 2023-10-22 17:33:16.021752
- DATE_ADD(NOW(6), INTERVAL 5 DAY_MINUTE), -- 2023-10-22 12:38:16.021752
- DATE_ADD(NOW(6), INTERVAL 5 DAY_SECOND), -- 2023-10-22 12:33:21.021752
- DATE_ADD(NOW(6), INTERVAL 5 DAY_MICROSECOND), -- 2023-10-22 12:33:16.521752
- DATE_ADD(NOW(6), INTERVAL 5 HOUR_MINUTE), -- 2023-10-22 12:38:16.021752
- DATE_ADD(NOW(6), INTERVAL 5 HOUR_SECOND), -- 2023-10-22 12:33:21.021752
- DATE_ADD(NOW(6), INTERVAL 5 HOUR_MICROSECOND), -- 2023-10-22 12:33:16.521752
- DATE_ADD(NOW(6), INTERVAL 5 MINUTE_SECOND), -- 2023-10-22 12:33:21.021752
- DATE_ADD(NOW(6), INTERVAL 5 MINUTE_MICROSECOND),-- 2023-10-22 12:33:16.521752
- DATE_ADD(NOW(6), INTERVAL 5 SECOND_MICROSECOND) -- 2023-10-22 12:33:16.521752
DATE()还可以用 SYSDATE()、LOCALTIME、LOCALTIME()、CURRENT_TIMSTAMP 和 CURRENT_TIMSTAMP()MySQL DATE_FORMAT() 函数按照指定的格式格式化日期时间。
语法:
DATE_FORMAT(date, format)
参数说明:
format 中可采用的格式化符号:
返回值:
NULL情况:如果其中任何一个参数为 NULL。示例:
- SELECT
- DATE_FORMAT('2023-10-24', '%Y'), -- 2023
- DATE_FORMAT('2023-10-24', '%W'), -- Tuesday
- DATE_FORMAT('2023-02-01', '%M %d, %Y'), -- February 01, 2022
- DATE_FORMAT('2023-02-01', '%M %e %Y'), -- February 1 2023
- DATE_FORMAT('2023-02-28', '%W, %M %e, %Y'), -- Tuesday, February 28, 2023
- DATE_FORMAT(NOW(), '%Y%m%d%H%i%S') -- 20231022181622
MySQL DATE_SUB() 函数在指定的日期/时间上减去指定到时间间隔加并返回新的日期/时间。
语法:
DATE_SUB(date, INTERVAL value unit)
参数说明:
YEAR 年QUARTER 季MONTH 月WEEK 周DAY 日HOUR 时MINUTE 分SECOND 秒MICROSECOND 微秒YEAR_MONTH DAY_HOUR DAY_MINUTE DAY_SECOND DAY_MICROSECOND HOUR_MINUTE HOUR_SECOND HOUR_MICROSECOND MINUTE_SECOND MINUTE_MICROSECOND SECOND_MICROSECOND 返回值:
DATE:date 是 DATE 类型,且时间间隔为 YEAR, MONTH 或者 DAY。TIME:date 是 TIME 且计算只涉及 HOURS, MINUTES 和 SECONDS 部分。DATETIME:
date 是 DATE 类型,并且时间间隔为 HOURS, MINUTES 或者 SECONDS。date 是 DATETIME 类型。date 是 TIME 类型,并且时间间隔为 YEAR, MONTH 或者 DAY。示例:
- SELECT
- DATE_SUB('2023-10-22', INTERVAL 10 DAY), -- 2023-10-12
- DATE_SUB('2023-10-22', INTERVAL 10 HOUR), -- 2023-10-21 14:00:00
- DATE_SUB('2023-10-22 14:00:00', INTERVAL 10 HOUR), -- 2023-10-22 04:00:00
- DATE_SUB('2023-10-22 14:00:00', INTERVAL 10 MINUTE),-- 2023-10-22 13:50:00
- DATE_SUB(CURDATE(), INTERVAL 10 HOUR), -- 2023-10-21 14:00:00
- DATE_SUB(NOW(), INTERVAL 10 MINUTE) -- 2023-10-22 14:18:03
MySQL DATEDIFF() 函数返回两个日期值之间的天数。
语法:
DATEDIFF(date1, date2)
参数说明:
返回值:
NULL情况:
NULL。示例:
- SELECT
- DATEDIFF('2023-10-22', '2023-10-28'), -- 06
- DATEDIFF('2023-10-22', '2023-10-28 10:10:10'), -- -6
- DATEDIFF('2023-10-22 10:10:10', '2023-10-28'), -- -6
- DATEDIFF('2023-10-22', '2023-10-27'), -- -5
- DATEDIFF('2023-10-22', '2023-10-27 10:10:10'), -- -5
- DATEDIFF('2023-10-22 10:10:10', '2023-10-27'), -- -5
- DATEDIFF('2023-10-22', '2023-10-28 10:10:10'), -- -6
- DATEDIFF('Not A DATEDIFF', 'Not A DATEDIFF'), -- NULL
- DATEDIFF(NULL, '2023-10-22'), -- NULL
- DATEDIFF(NOW(), '2023-10-18') -- 4
- DATEDIFF(NOW(), '2023-10-20'), -- 2
- DATEDIFF(CURDATE(), '2023-10-20'), -- 2
- DATEDIFF(CURRENT_DATE(), '2023-10-20'), -- 2
- DATEDIFF(SYSDATE(), '2023-10-20') -- 2
MySQL ADDDATE() 函数在指定的日期/时间上加上指定到时间间隔加并返回新的日期/时间。
语法:
- ADDDATE(date, days)
- ADDDATE(date, INTERVAL value unit)
参数说明:
YEAR 年QUARTER 季MONTH 月WEEK 周DAY 日HOUR 时MINUTE 分SECOND 秒MICROSECOND 微秒YEAR_MONTH DAY_HOUR DAY_MINUTE DAY_SECOND DAY_MICROSECOND HOUR_MINUTE HOUR_SECOND HOUR_MICROSECOND MINUTE_SECOND MINUTE_MICROSECOND SECOND_MICROSECOND返回值:
DATE情况:date 是 DATE 类型,且时间间隔为 YEAR, MONTH 或者 DAY。TIME情况:date 是 TIME 类型,且计算只涉及 HOURS, MINUTES 和 SECONDS 部分。DATETIME情况:
date 参数是 DATE 类型,并且时间间隔为 HOURS, MINUTES 或者 SECONDS。date 参数是 DATETIME 类型。date 参数是 TIME 类型,并且时间间隔为 YEAR, MONTH 或者 DAY。示例:
- SELECT
- ADDDATE('2023-10-22', 10), -- 2023-11-01
- ADDDATE('2023-10-22', -10), -- 2023-10-12
- ADDDATE('2023-10-22', INTERVAL 10 DAY), -- 2023-11-01
- ADDDATE('2023-10-22', INTERVAL 10 HOUR), -- 2023-10-22 10:00:00
- ADDDATE('2023-10-22 10:00:00', INTERVAL 10 HOUR), -- 2023-10-22 20:00:00
- ADDDATE('2023-10-22 10:00:00', INTERVAL 10 MINUTE), -- 2023-10-22 10:10:00
- ADDDATE(CURDATE(), INTERVAL 10 HOUR), -- 2023-10-22 10:00:00
- ADDDATE(NOW(), INTERVAL 10 MINUTE) -- 2023-10-22 15:58:07
MySQL MAKEDATE() 函数根据年份和一年中天数创建一个日期并返回。
语法:
MAKEDATE(year, day_of_year)
参数说明:
返回值:
NULL情况:
day_of_year 等于或小于 0。示例:
- SELECT
- MAKEDATE(2023, 1), -- 2023-01-01
- MAKEDATE(2023, 31), -- 2023-01-31
- MAKEDATE(2023, 32), -- 2023-02-01
- MAKEDATE(2023, 0) -- NULL
MySQL STR_TO_DATE() 函数将指定的字符串根据指定日期格式转为日期/时间。 STR_TO_DATE() 函数与 DATE_FORMAT() 函数是相反的。
语法:
STR_TO_DATE(str, format)
参数说明:
返回值:
NULL情况:
format 解析 str。NULL。示例:
- SELECT
- STR_TO_DATE('2023/10/24', '%Y/%m/%d'), -- 2023-10-24
- STR_TO_DATE('2023/10/24 10:10:10', '%Y/%m/%d %H:%i:%S'), -- 2023-10-24 10:10:10
- STR_TO_DATE('2023/10/24 10:10:10', 'abc'), -- NULL
- STR_TO_DATE('2023/10/24 10:10:10', NULL) -- NULL
MySQL SUBDATE() 函数在指定的日期/时间上减去指定到时间间隔加并返回新的日期/时间。
语法:
- SUBDATE(date, days)
- SUBDATE(date, INTERVAL value unit)
参数说明:
YEAR 年QUARTER 季MONTH 月WEEK 周DAY 日HOUR 时MINUTE 分SECOND 秒MICROSECOND 微秒YEAR_MONTH DAY_HOUR DAY_MINUTE DAY_SECOND DAY_MICROSECOND HOUR_MINUTE HOUR_SECOND HOUR_MICROSECOND MINUTE_SECOND MINUTE_MICROSECOND SECOND_MICROSECOND 返回值:
DATE情况:date 是 DATE 类型,且时间间隔为 YEAR, MONTH 或者 DAY。TIME情况:date 是 TIME 类型,且计算只涉及 HOURS, MINUTES 和 SECONDS 部分。DATETIME情况:
date 是 DATE 类型,且时间间隔为 HOURS, MINUTES 或者 SECONDS。date 是 DATETIME 类型。date 是 TIME 类型,且时间间隔为 YEAR, MONTH 或者 DAY。示例:
- SELECT
- SUBDATE('2023-10-24', 10), -- 2023-10-14
- SUBDATE('2023-10-24', -10), -- 2023-11-03
- SUBDATE('2023-10-24', INTERVAL 10 DAY), -- 2023-10-14
- SUBDATE('2023-10-24', INTERVAL 10 HOUR), -- 2023-10-23 14:00:00
- SUBDATE('2023-10-24 10:24:00', INTERVAL 10 HOUR), -- 2023-10-24 00:24:00
- SUBDATE('2023-10-24 10:24:00', INTERVAL 10 MINUTE), -- 2023-10-24 10:14:00
- SUBDATE(CURDATE(), INTERVAL 10 HOUR), -- 2023-10-21 14:00:00
- SUBDATE(NOW(), INTERVAL 10 MINUTE) -- 2023-10-22 09:29:34
语法:
TIME(expr)
参数说明:
返回值:
NULL情况:
NULL。示例:
- SELECT
- TIME('11:11:11'), -- 11:11:11
- TIME('2023-02-28 11:11:11'), -- 11:11:11
- TIME('11:11:11.001112'), -- 11:11:11
- TIME('2023-02-28 11:11:11'), -- 11:11:11
- TIME(NOW()), -- 18:19:05
- TIME('Not A Date'), -- 00:00:00
- TIME(NULL) -- null
MySQL TIME_FORMAT() 函数按照指定的格式格式化时间。
语法:
TIME_FORMAT(time, format)
参数说明:
返回值:
NULL情况:任何一个参数为 NULL。示例:
- SELECT
- TIME_FORMAT("14:30:10", "%H %i %s"), -- 14 30 10
- TIME_FORMAT("14:30:10", "%h %i %s %p"), -- 02 30 10 PM
- TIME_FORMAT("14:30:10", "%r"), -- 02:30:10 PM
- TIME_FORMAT("14:30:10", "%T"), -- 14:30:10
- TIME_FORMAT("14:30:10", "%H %i %s") -- 14 30 10
MySQL TIME_TO_SEC() 函数将指定的时间值转为秒数。
语法:
TIME_TO_SEC(time)
参数说明:
返回值:
NULL情况:参数为 NULL。示例:
- SELECT
- TIME_TO_SEC('14:14:10') `14:14:10`, -- 51250
- TIME_TO_SEC('14:14') `14:14`, -- 51240
- TIME_TO_SEC('14') `14`; -- 14
MySQL TIMEDIFF() 函数返回两个时间之间的差值。
语法:
TIMEDIFF(time1, time2)
参数说明:
返回值:
HH:MM:SS 格式的时间值。NULL情况:
NULL。示例:
- SELECT
- TIMEDIFF('14:14:14', '14:10:10'), -- 00:04:04
- TIMEDIFF('14:14:14', '10:10:10'), -- 04:04:04
- TIMEDIFF('2023-10-28 12:12:12', '2023-10-21 10:10:10'), -- 170:02:02
- TIMEDIFF(NOW(), '2023-10-28 10:10:10') -- -139:18:40
MySQL TIMESTAMP() 函数累加所有参数并将结果作为日期时间值返回。
语法:
- TIMESTAMP(date_or_datetime)
- TIMESTAMP(date_or_datetime, time)
参数说明:
返回值:
date_or_datetime 作为日期时间值返回。date_or_datetime 与 time 的和作为日期时间值返回。NULL情况:任何一个参数为 NULL。示例:
- SELECT TIMESTAMP('2023-10-22'), -- 2023-10-22 00:00:00
- TIMESTAMP('2023-10-22', '10:10:10'), -- 2023-10-22 10:10:10
- TIMESTAMP('2023-10-22 12:00:00', '12:00:00') -- 2023-10-23 00:00:00
MySQL TIMESTAMPADD() 函数将指定的时间间隔加到一个日期时间值上并返回结果。
语法:
TIMESTAMPADD(unit, interval, datetime)
参数说明:
返回值:
interval 加到一个日期时间值上并返回结果。NULL情况:任何一个参数为 NULL。示例:
- SELECT
- TIMESTAMPADD(WEEK, 1, '2023-10-22'), -- 2023-10-29
- TIMESTAMPADD(DAY, 7, '2023-10-22'), -- 2023-10-29
- TIMESTAMPADD(SECOND, 10, '2023-10-22'); -- 2023-10-22 00:00:10
MySQL TIMESTAMPDIFF() 函数返回两个日期时间之间的时间间隔。
语法:
TIMESTAMPDIFF(unit, datetime1, datetime2)
参数说明:
返回值:
NULL情况:任何一个参数为 NULL。示例:
- SELECT
- TIMESTAMPDIFF(YEAR, '2022-1-28', '2023-10-22'), -- 1
- TIMESTAMPDIFF(MONTH, '2022-02-28', '2023-10-22'),-- 19
- TIMESTAMPDIFF(MONTH, '2023-02-28', '2023-10-22') -- 7
MySQL ADDTIME() 函数在指定的时间上加上指定的时间间隔并返回结果。
语法:
ADDTIME(timeExpr1, timeExpr2)
参数说明:
返回值:
timeExpr2 加到 timeExpr1 上,并返回结果。timeExpr1 参数是动态类型,ADDTIME() 函数返回值类型为 TIME。否则,ADDTIME() 函数返回的数据类型和第一个参数一样。示例:
- SELECT
- ADDTIME('2023-10-10 10:10:10', 10), -- 2023-10-10 10:10:20
- ADDTIME('14:10:10', 10), -- 14:10:20
- ADDTIME('14:10:10', 100), -- 14:11:10
- ADDTIME('14:10:10', '100'), -- 14:11:10
- ADDTIME('14:10:10', '0:01:00'), -- 14:11:10
- ADDTIME('14:00:00', '01:10:10.000010'), -- 15:10:10.000010
- ADDTIME('14:00:00', '-01:10:10.000010'), -- 12:49:49.999990
- SUBTIME('14:00:00', '01:10:10.000010') -- 12:49:49.999990
MySQL LOCALTIME() 函数按 YYYY-MM-DD hh:mm:ss 格式返回当前时间和日期。
LOCALTIME() 函数与 NOW() 函数完全相同。
语法:
- LOCALTIME
- LOCALTIME()
返回值:
示例:
- SELECT
- LOCALTIME, -- 2023-10-22 08:20:38
- LOCALTIME + 1, -- 20231022082039
- LOCALTIME(), -- 2023-10-22 08:20:38
- LOCALTIME() + 1; -- 20231022082039
MySQL LOCALTIMESTAMP() 函数按 YYYY-MM-DD hh:mm:ss 格式返回当前时间和日期。
LOCALTIMESTAMP() 函数与 NOW() 函数完全相同。
语法:
- LOCALTIMESTAMP
- LOCALTIMESTAMP()
返回值:
示例:
- SELECT
- LOCALTIMESTAMP, -- 2023-10-22 08:23:48
- LOCALTIMESTAMP + 1, -- 20231022082349
- LOCALTIMESTAMP(), -- 2023-10-22 08:23:48
- LOCALTIMESTAMP() + 1 -- 20231022082349
MySQL MAKETIME() 函数指定的时、分、秒创建一个时间并返回。
语法:
MAKETIME(hour, minute, second)
参数说明:
返回值:
NULL情况:
如果 minute 不在 0 到 59 之间。second 不在 0 到 59 之间-838:59:59 到 838:59:59。示例:
- SELECT
- MAKETIME(10, 11, 12), -- 10:11:12
- MAKETIME(100, 11, 12), -- 100:11:12
- MAKETIME(839, 11, 12), -- 838:59:59
- MAKETIME(-999, 11, 12), -- -838:59:59
- MAKETIME(10, 11, 12), -- 10:11:12
- MAKETIME(10, 60, 12), -- NULL
- MAKETIME(10, 11, 75) -- NULL
MySQL SEC_TO_TIME() 函数将指定的秒数转为一个格式为 HH:MM:SS 的时间值。
语法:
SEC_TO_TIME(seconds)
参数说明:
返回值:
HH:MM:SS 的时间值。NULL情况:参数为 NULL。示例:
- SELECT
- SEC_TO_TIME(100), -- 00:01:40
- SEC_TO_TIME(3600), -- 01:00:00
- SEC_TO_TIME(-72000); -- -20:00:00
MySQL SUBTIME() 函数在指定的时间上减去指定的时间间隔并返回结果。
语法:
SUBTIME(timeExpr1, timeExpr2)
参数说明:
返回值:
timeExpr1 中减去 timeExpr2,并返回结果。timeExpr1 参数是动态类型,SUBTIME() 函数返回值类型为 TIME。SUBTIME() 函数返回的数据类型和第一个参数一样。示例:
- SELECT
- SUBTIME('2023-12-24 10:10:24', 10), -- 2023-12-24 10:10:14
- SUBTIME('10:10:24', 10), -- 10:10:14
- SUBTIME('10:10:24', 100), -- 10:09:24
- SUBTIME('10:10:24', '100'), -- 10:09:24
- SUBTIME('10:10:24', '0:01:00'), -- 10:09:24
- SUBTIME('10:00:24', '01:10:10.000010'), -- 08:50:13.999990
- SUBTIME('10:00:24', '-01:10:10.000010'), -- 11:10:34.000010
- ADDTIME('10:00:24', '01:10:10.000010') -- 11:10:34.000010
MySQL UNIX_TIMESTAMP() 函数将指定的日期/日期时间转为 UNIX 时间戳值。 UNIX 时间戳值是距离 UTC 时间 1970-01-01 00:00:00 的秒数。
语法:
- UNIX_TIMESTAMP()
- UNIX_TIMESTAMP(date_or_datetime)
参数说明:
NOW()。返回值:
1970-01-01 00:00:00 的秒数。NULL情况:参数为 NULL。示例:
- SELECT
- UNIX_TIMESTAMP(), -- 1697968385
- UNIX_TIMESTAMP(NOW()), -- 1697968385
- UNIX_TIMESTAMP(NULL) -- NULL
MySQL CURDATE() 函数按 YYYY-MM-DD 或 YYYYMMDD 格式返回系统的当前日期。
CURDATE() 函数与 CURRENT_DATE() 函数完全相同。
语法:
CURDATE()
返回值:
示例:
- SELECT
- CURDATE(), -- 2023-10-22
- CURDATE() + 0, -- 20231022
- CURDATE() + 1; -- 20231023
MySQL CURRENT_DATE() 函数按 YYYY-MM-DD 或 YYYYMMDD 格式返回系统的当前日期。
CURDATE() 函数与 CURRENT_DATE() 函数完全相同。
语法:
- CURRENT_DATE
- CURRENT_DATE()
返回值:
示例:
- SELECT
- CURRENT_DATE, -- 2023-10-22
- CURRENT_DATE + 1, -- 20231023
- CURRENT_DATE(), -- 2023-10-22
- CURRENT_DATE() + 0, -- 20231022
- CURRENT_DATE() + 1; -- 20231023
MySQL CURRENT_TIME() 函数按 hh:mm:ss 格式返回系统的当前时间。
CURRENT_TIME() 函数与 CURTIME() 函数完全相同。
语法:
- CURRENT_TIME
- CURRENT_TIME()
返回值:
示例:
- SELECT
- CURRENT_TIME, -- 15:28:58
- CURRENT_TIME + 1, -- 152859
- CURRENT_TIME(), -- 15:28:58
- CURRENT_TIME() + 0, -- 152858
- CURRENT_TIME() + 1 -- 152859
MySQL CURRENT_TIMESTAMP() 函数按 YYYY-MM-DD hh:mm:ss 格式返回当前时间和日期。
CURRENT_TIMESTAMP() 函数与 NOW() 函数完全相同。
语法:
- CURRENT_TIMESTAMP
- CURRENT_TIMESTAMP()
返回值:
示例:
- SELECT
- CURRENT_TIMESTAMP, -- 2023-10-22 15:32:40
- CURRENT_TIMESTAMP + 1, -- 20231022153241
- CURRENT_TIMESTAMP(), -- 2023-10-22 15:32:40
- CURRENT_TIMESTAMP() + 0, -- 20231022153240
- CURRENT_TIMESTAMP() + 1; -- 20231022153241
MySQL CURTIME() 函数按 hh:mm:ss 格式返回系统的当前时间。
CURTIME() 函数与 CURRENT_TIME() 函数完全相同。
语法:
CURTIME()
返回值:
示例:
- SELECT
- CURTIME(), -- 15:39:13
- CURTIME() + 0, -- 153913
- CURTIME() + 1 -- 153914
MySQL MICROSECOND() 函数提取时间或日期时间中的微秒部分部分并作为数字返回。
语法:
MICROSECOND(time)
参数说明:
返回值:
0 到 999999 之间的数字。NULL情况:参数为 NULL。示例:
- SELECT
- MICROSECOND('10:11:12.000334'), -- 334
- MICROSECOND('2023-10-24 10:11:12.000334'), -- 334
- MICROSECOND('2023-10-24') -- 0
MySQL SECOND() 函数提取并返回时间的秒部分。
语法:
SECOND(time)
参数说明:
返回值:
SECOND() 函数的返回值介于 0 到 59 之间。NULL。示例:
- SELECT
- SECOND('10:11:12'), -- 12
- SECOND('2023-10-24 10:11:12') -- 12
MySQL MINUTE() 函数提取并返回时间的分钟部分。
语法:
MINUTE(time)
参数说明:
返回值:
0 到 59 之间。NULL情况:参数为 NULL。示例:
- SELECT
- MINUTE('14:11:12'), -- 11
- MINUTE('2023-10-24 14:11:12') -- 11
MySQL HOUR() 函数提取并返回时间的小时部分。
语法:
HOUR(time)
参数说明:
返回值:
838:59:59,HOUR() 函数的最大返回值是 838。0:如果 time 中没有小时部分。NULL:参数为 NULL。示例:
- SELECT
- HOUR('10:10:10'), -- 10
- HOUR('2023-10-24 10:10:10'), -- 10
- HOUR('123:10:10'), -- 123
- HOUR('1234:10:10'), -- 838 MySQL 支持的最大时间是 838:59:59
- HOUR('2023-10-24'), -- 0 不正确的时间格式
- HOUR('2023-10-31'), -- 0 不正确的时间格式
- HOUR('Not A DATE'), -- 0 不正确的时间格式
- HOUR(NULL) -- NULL
MySQL DAY() 函数返回日期时间表达式中的代表月份中的一天的数字。此函数等同于 DAYOFMONTH() 函数。
语法:
DAY(expr)
参数说明:
返回值:
NULL情况:
NULL。示例:
- SELECT
- DAY('2023-10-21'), -- 21
- DAY('2023-10-21 09:10:10'), -- 21
- DAY(NOW()), -- 21
- DAY('2023-02-00'), -- 0
- DAY('2023-02-30'), -- NULL
- DAY('Not A DATE'), -- NULL
- DAY(NULL) -- NULL
MySQL MONTH() 函数提取日期的月份部分并作为数字返回。
语法:
MONTH(date)
参数说明:
返回值:
1 到 12 之间。NULL情况:参数为 NULL。示例:
- SELECT
- MONTH('2023-10-24'), -- 10
- MONTH('2023-10-24 14:11:12') -- 10
MySQL QUARTER() 函数返回一个指定日期所在季度值。
语法:
QUARTER(date)
参数说明:
返回值:
1 到 4 之间:
1: 第一季度,即 1 月到 3 月。2: 第二季度,即 4 月到 6 月。3: 第三季度,即 7 月到 9 月。4: 第四季度,即 10 月到 12 月。NULL:参数为 NULL。示例:
- SELECT
- QUARTER('2023-10-24'), -- 4
- QUARTER('2023-10-24 10:11:12') -- 4
MySQL YEAR() 函数提取日期的年份部分并作为数字返回。
语法:
YEAR(date)
参数说明:
返回值:
0 或者介于 1000 到 9999 之间的数字。NULL情况:参数为 NULL。示例:
- SELECT
- YEAR('2023-10-24'), -- 2023
- YEAR('2023-10-24 10:11:12'), -- 2023
- YEAR('0000-01-01'), -- 0
- YEAR('abc') -- NULL
MySQL TO_SECONDS() 函数将指定的日期/日期时间转为距离 0 年的秒数并返回结果。
语法:
TO_SECONDS(date_or_datetime)
参数说明:
返回值:
NULL情况:
NULL。示例:
- SELECT
- TO_SECONDS('2023-10-24'), -- 63865324800
- TO_SECONDS('2023-10-24 10:10:14') -- 63865361414
MySQL MONTHNAME() 函数返回给定日期的月份的名字。
语法:
MONTHNAME(date)
参数说明:
返回值:
January。February。March。April。May。June。July。August。September。October。November。December。NULL情况:
指定的表达式不是一个合法的日期或者日期时间。NULL。示例:
- SELECT
- MONTHNAME('2023-10-01'), -- October
- MONTHNAME('2023-11-01'), -- November
- MONTHNAME('2023-12-01'), -- December
- MONTHNAME('2024-01-01'), -- January
- MONTHNAME('2024-02-01'), -- February
- MONTHNAME('2024-03-01'), -- March
- MONTHNAME('2024-04-01'), -- April
- MONTHNAME('2024-05-01'), -- May
- MONTHNAME('2024-06-01'), -- June
- MONTHNAME('2024-07-01'), -- July
- MONTHNAME('2024-08-01'), -- August
- MONTHNAME('2024-09-01'), -- September
- MONTHNAME('Not A DATE'), -- NULL
- MONTHNAME(NULL) -- NULL
MySQL PERIOD_ADD() 函数在指定年月上加上指定的月数将结果作为年月返回。
语法:
PERIOD_ADD(period, month_number)
参数说明:
返回值:
YYYYMM)NULL情况:参数为 NULL。示例:
- SELECT
- PERIOD_ADD(202301, 1), -- 202302
- PERIOD_ADD(202301, 2), -- 202303
- PERIOD_ADD(202301, 3), -- 202304
- PERIOD_ADD(202301, 4), -- 202305
- PERIOD_ADD(202301, 5), -- 202306
- PERIOD_ADD(202301, 6), -- 202307
- PERIOD_ADD(202301, 7), -- 202308
- PERIOD_ADD(202301, 8), -- 202309
- PERIOD_ADD(202301, 9), -- 202310
- PERIOD_ADD(202301, 10), -- 202311
- PERIOD_ADD(202301, 11), -- 202312
- PERIOD_ADD(202301, 12) -- 202401
MySQL PERIOD_DIFF() 函数返回两个通过年月指定的时期之间相差的月数。
语法:
PERIOD_DIFF(period1, period2)
参数说明:
返回值:
示例:
- SELECT
- PERIOD_DIFF(202302, 202301), -- 1
- PERIOD_DIFF(202303, 202301), -- 2
- PERIOD_DIFF(202304, 202301), -- 3
- PERIOD_DIFF(202305, 202301), -- 4
- PERIOD_DIFF(202306, 202301), -- 5
- PERIOD_DIFF(202307, 202301), -- 6
- PERIOD_DIFF(202308, 202301), -- 7
- PERIOD_DIFF(202309, 202301), -- 8
- PERIOD_DIFF(202310, 202301), -- 9
- PERIOD_DIFF(202311, 202301), -- 10
- PERIOD_DIFF(202312, 202301), -- 11
- PERIOD_DIFF(202301, 202301) -- 0
MySQL CONVERT_TZ() 函数将一个时区的时间转为另一个时区的时间并返回。
语法:
CONVERT_TZ(datetime, fromTimeZone, toTimeZone)
参数说明:
+/-[H]H:MM 是和 UTC 时间的偏移量,如 '+10:00','-6:00','+05:00'等。'Europe/Helsinki', 'US/Eastern', 'MET', 'GMT'。返回值:
NULL,CONVERT_TZ() 函数将返回 NULL示例:
- SELECT
- CONVERT_TZ('2023-10-22 14:00:00', 'GMT', 'MET'), -- 2023-10-22 16:00:00
- CONVERT_TZ('2023-10-22 14:00:00', 'GMT', '+01:00'), -- 2023-10-22 15:00:00
- CONVERT_TZ('2023-10-22 14:00:00', 'GMT', '-01:00'), -- 2023-10-22 13:00:00
- CONVERT_TZ('2023-10-22 14:00:00', 'GMT', '-03:00') -- 2023-10-22 11:00:00
UTC函数有:
UTC_DATE、UTC_DATE() 函数:与DATE函数相似(UTC_DATE少8个小时)详见 7.1
UTC_TIME、UTC_TIME() 函数:与TIME函数相似(UTC_DATE少8个小时)详见 8.1
UTC_TIMESTAMP、UTC_TIMESTAMP() 函数:与TIMESTAMP函数相似(UTC_DATE少8个小时)详见 8.5