MYSQL日期时间函数是数据库操作中不可或缺的一环,它们能够精确处理和操控时间数据,为数据分析、查询优化和报表生成提供强大的支持。以下是一些常用的MySQL时间函数。
内容有点多,建议收藏以备后续用到查阅参考。
目录
一、获取当前日期+时间
语法:
NOW(M)
参数说明:
- M:非必须。保留的微秒位数,最大值为6。
示例:
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()相似)
- SYSDATE()。
- LOCALTIME。
- LOCALTIME()。
- CURRENT_TIMESTAMP。
- CURRENT_TIMESTAMP()。
二、获取当前日期
mysql> SELECT CURDATE(), CURDATE()+1; +---------------------+-----------------------+ | CURDATE() | CURDATE()+1 | +---------------------+-----------------------+ | 2023-10-22 | 20231023 | +---------------------+-----------------------+
- 无参
说明:
CURDATE()
的结果为YYYY-MM-DD
格式。CURDATE() + 0
的结果为YYYYMMDD
格式。CURDATE() + N
意味着当前日期加上一个数字。- 除了 CURDATE() 能获取当前日期外,还有:(
+ N
意味着当前日期加上一个数字)
- CURRENT_DATE。
- CURRENT_DATE()。
三、获取当前时间
语法:
CURTIME(M)
参数说明:
- M:非必须。保留的微秒位数,最大值为6。
示例:
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_DATE、UTC_DATE()
- UTC_TIME、UTC_TIME()
- UTC_TIMESTAMP、UTC_TIMESTAMP()
因为我国位于东八时区,所以本地时间 = UTC 时间 + 8 小时。UTC 时间在业务涉及多个国家和地区的时候,非常有用。
四、日期时间选取函数(Extract函数)
MySQL EXTRACT()
函数从指定的日期/时间中提取指定的部分并返回。
语法:
EXTRACT(unit FROM date)
参数说明:
- date:必需的。一个日期或者日期时间表达式。
- 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 秒+微秒
返回值:
- 从指定的日期/时间中提取指定的部分并返回。
- 返回
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
五、WEEK相关函数
5.1 WEEK() 函数
MySQL WEEK()
函数返回给定日期位于当年的第几周。
语法:
WEEK(date) WEEK(date, mode)
参数说明:
- date:必需的。一个日期或者日期时间表达式。
- mode:可选的。确定计算周的逻辑。如果没有指定该参数,默认将使用 default_week_format 变量的值。
返回值:
- 返回给定日期位于当年的第几周,取值范围为
0
到53
。 - 返回 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 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
5.2 WEEKDAY() 函数
MySQL WEEKDAY()
函数返回给定日期的工作日编号。
语法:
WEEKDAY(date)
参数说明:
- date: 必需的。一个日期或者日期时间表达式。
返回值:
- 0 :Monday
- 1 :Tuesday
- 2 :Wednesday
- 3 :Thursday
- 4 :Friday
- 5 :Saturday
- 6 :Sunday
- 返回
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
- 如果想返回今天的工作日名称,参数用 NOW()、CURDATE(),、CURRENT_DATE() 或 SYSDATE()
5.3 WEEKOFYEAR() 函数
MySQL WEEKOFYEAR()
函数返回给定日期位于当年的第几周。该函数相当于WEEK(date,3)。
语法:
WEEKOFYEAR(date)
参数说明:
- 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 | +---------------------+-----------------+
5.4 YEARWEEK() 函数
MySQL YEARWEEK() 函数返回一个表示给定日期所在年份和第几周的数字。此函数与 WEEK() 类似。
语法:
YEARWEEK(date) YEARWEEK(date, mode)
参数说明:
- date:必需的。一个日期或者日期时间表达式。
- mode:可选的。确定计算周的逻辑。如果没有指定该参数,默认将使用 default_week_format 变量的值。
返回值:
- 返回一个表示给定日期所在年份和第几周的数字。
- 返回
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 | +---------------------+-----------------+
六、DAY相关函数
6.1 DAY() 函数
MySQL DAY() 函数返回日期时间表达式中的代表月份中的一天的数字。此函数等同于 DAYOFMONTH() 函数。
语法:
DAY(expr)
参数说明:
- expr:必需的。一个日期或者日期时间表达式。
返回值:
- 返回日期时间表达式中的代表月份中的一天的数字,从 1 到 31。
- 返回
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
6.2 DAYNAME() 函数
MySQL DAYNAME()
函数返回给定日期的工作日名称。
语法:
DAYNAME(expr)
参数说明:
- 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
- 如果想返回今天的工作日名称,参数用 NOW(),、CURDATE(),、CURRENT_DATE() 或 SYSDATE()
6.3 DAYOFMONTH() 函数
MySQL DAYOFMONTH() 函数返回日期时间表达式中的代表月份中的一天的数字。此函数等同于 DAY() 函数。
语法:
DAYOFMONTH(expr)
参数说明:
- expr:必需的。一个日期或者日期时间表达式。
返回值:
- 返回日期时间表达式中的代表月份中的一天的数字,从 1 到 31。
- 如果给定的日期的天的部分为 0 ,比如:
'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
6.4 DAYOFWEEK() 函数
MySQL DAYOFWEEK()
函数返回给定日期的工作日的索引。
语法:
DAYOFWEEK(expr)
参数说明:
- expr:必需的。一个日期或者日期时间表达式。
返回值:
- 返回一个从
1
到7
之间的数字,代表的含义如下:
- 1:星期天
- 2:星期一
- 3:星期二
- 4:星期三
- 5:星期四
- 6:星期五
- 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
6.5 DAYOFYEAR() 函数
MySQL DAYOFYEAR()
函数返回一个从 1
到 366
代表给定日期是一年中的第几天的数字。
语法:
DAYOFYEAR(expr)
参数说明:
- 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
- 如果想返回今天的工作日名称,参数用 NOW(),、CURDATE(),、CURRENT_DATE() 或 SYSDATE()
6.6 FROM_DAYS() 函数
MySQL FROM_DAYS() 函数将指定的天数转为日期并返回。FROM_DAYS() 函数与 TO_DAYS() 函数是相反的。
语法:
FROM_DAYS(days)
参数说明:
- days:必需的。一个表示天数的整数值。
返回值:
- 返回一个由指定天数表示的日期。
- 返回
NULL情况:
- 参数为
NULL。
示例:
SELECT FROM_DAYS(739179), -- 2023-10-21 FROM_DAYS(739180); -- 2023-10-22
6.7 TO_DAYS() 函数
MySQL TO_DAYS() 函数将指定日期转为距离 0 年的天数并返回。TO_DAYS() 函数与 FROM_DAYS() 函数是相反的。
语法:
TO_DAYS(date)
参数说明:
- date:必需的。一个日期值。
返回值:
- 返回指定的日期从 0 年开始的天数。
- 返回
NULL情况:
- 参数为
NULL。
示例:
SELECT TO_DAYS('2023-10-21'), -- 739179 TO_DAYS(now()); -- 739180
6.8 LAST_DAY() 函数
MySQL LAST_DAY()
函数返回指定的日期或者日期时间所在当月的最后一天。
语法:
LAST_DAY(date)
参数说明:
- 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
七、DATE相关函数
7.1 DATE() 函数
MySQL DATE()
函数从日期时间表达式中提取日期部分并返回。
语法:
DATE(expr)
参数说明:
- 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
7.2 DATE_ADD() 函数
MySQL DATE_ADD()
函数在指定的日期/时间上加上指定到时间间隔加并返回新的日期/时间。
语法:
DATE_ADD(date, INTERVAL value unit)
参数说明:
- date:必需的。需要操作的日期。
- 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参数除了
DATE()
还可以用SYSDATE
()、LOCALTIME、LOCALTIME
()、CURRENT_TIMSTAMP
和CURRENT_TIMSTAMP
()
7.3 DATE_FORMAT() 函数
MySQL DATE_FORMAT()
函数按照指定的格式格式化日期时间。
语法:
DATE_FORMAT(date, format)
参数说明:
- date:必需的。需要格式化的日期。
- format:必需的。格式化模式字符串。
format
中可采用的格式化符号:
- %a 星期的缩写 (Sun..Sat)
- %b 月份的缩写 (Jan..Dec)
- %c 月份数字 (0..12)
- %D 带有英语前缀的月份中的每天 (0th, 1st, 2nd, 3rd, …)
- %d 月份中的每天的两位数字表示 (00..31)
- %e 月份中的每天的数字表示 (0..31)
- %f 微秒 (000000..999999)
- %H 小时 (00..23)
- %h 小时 (01..12)
- %I 小时 (01..12)
- %i 分钟 (00..59)
- %j 一年中的每天 (001..366)
- %k 小时 (0..23)
- %l 小时 (1..12)
- %M 月份名称 (January..December)
- %m 两位数字月份 (00..12)
- %p AM 或者 PM
- %r 十二小时制时间 (hh:mm:ss 后跟 AM 或 PM)
- %S 秒 (00..59)
- %s 秒 (00..59)
- %T 二十四小时制时间 (hh:mm:ss)
- %U 一年中的星期 (00..53), 每周的开始是星期天; WEEK() 函数中的 mode 0
- %u 一年中的星期 (00..53), 每周的开始是星期一; WEEK() 函数中的 mode 1
- %V 一年中的星期 (01..53), 每周的开始是星期天; WEEK() 函数中的 mode 2, 用于 %X
- %v 一年中的星期 (01..53), 每周的开始是星期一; WEEK() 函数中的 mode 3, 用于 %x
- %W 星期的名称 (Sunday..Saturday)
- %w 星期中的每天 (0=星期天..6=星期六)
- %X 一年中的星期,每周的开始是星期天,四位数字,用于 %V
- %x 一年中的星期,每周的开始是星期一,四位数字,用于 %v
- %Y 四位数字年份
- %y 两位数字年份
- %% 转义 %
- %x x, 上面为列举的其他字符
返回值:
- 按照指定的格式格式化日期时间并返回格式化后的字符串。
- 返回
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
7.4 DATE_SUB() 函数
MySQL DATE_SUB()
函数在指定的日期/时间上减去指定到时间间隔加并返回新的日期/时间。
语法:
DATE_SUB(date, INTERVAL value unit)
参数说明:
- date:必需的。需要操作的日期。
- days:必需的。在 date 上减去的天数。
- 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
7.5 DATEDIFF() 函数
MySQL DATEDIFF()
函数返回两个日期值之间的天数。
语法:
DATEDIFF(date1, date2)
参数说明:
- 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
7.6 ADDDATE() 函数
MySQL ADDDATE()
函数在指定的日期/时间上加上指定到时间间隔加并返回新的日期/时间。
语法:
ADDDATE(date, days) ADDDATE(date, INTERVAL value unit)
参数说明:
- date:必需的。需要操作的日期。
- days:必需的。在 date 上加上的天数。
- 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
7.7 MAKEDATE() 函数
MySQL MAKEDATE()
函数根据年份和一年中天数创建一个日期并返回。
语法:
MAKEDATE(year, day_of_year)
参数说明:
- year:必需的。表示年份的 4 位数字。
- day_of_year:必需的。一年中的第几天。应该大于 0。
返回值:
- 根据年份和一年中天数创建一个日期并返回。
- 返回
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
7.8 STR_TO_DATE() 函数
MySQL STR_TO_DATE() 函数将指定的字符串根据指定日期格式转为日期/时间。 STR_TO_DATE() 函数与 DATE_FORMAT() 函数是相反的。
语法:
STR_TO_DATE(str, format)
参数说明:
- str:必需的。需要格式化成日期的字符串。
- format:必需的。格式化字符串。可采用的格式化符号:
- %a:星期的缩写 (Sun..Sat)
- %b:月份的缩写 (Jan..Dec)
- %c:月份数字 (0..12)
- %D:带有英语前缀的月份中的每天 (0th, 1st, 2nd, 3rd, …)
- %d:月份中的每天的两位数字表示 (00..31)
- %e:月份中的每天的数字表示 (0..31)
- %f:微秒 (000000..999999)
- %H:小时 (00..23)
- %h:小时 (01..12)
- %I:小时 (01..12)
- %i:分钟 (00..59)
- %j:一年中的每天 (001..366)
- %k:小时 (0..23)
- %l:小时 (1..12)
- %M:月份名称 (January..December)
- %m:两位数字月份 (00..12)
- %p:AM 或者 PM
- %r:十二小时制时间 ( hh:mm:ss 后跟 AM 或 PM)
- %S:秒 (00..59)
- %s:秒 (00..59)
- %T:二十四小时制时间 (hh:mm:ss)
- %U:一年中的星期 (00..53), 每周的开始是星期天; WEEK() 函数中的 mode 0
- %u:一年中的星期 (00..53), 每周的开始是星期一; WEEK() 函数中的 mode 1
- %V:一年中的星期 (01..53), 每周的开始是星期天; WEEK() 函数中的 mode 2, 用于 %X
- %v:一年中的星期 (01..53), 每周的开始是星期一; WEEK() 函数中的 mode 3, 用于 %x
- %W:星期的名称 (Sunday..Saturday)
- %w:星期中的每天 (0=星期天..6=星期六)
- %X:一年中的星期,每周的开始是星期天,四位数字,用于 %V
- %x:一年中的星期,每周的开始是星期一,四位数字,用于 %v
- %Y:四位数字年份
- %y:两位数字年份
- %%:转义 %
- %x:x, 上面为列举的其他字符
返回值:
- 返回一个日期/时间/日期时间。
- 返回
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
7.9 SUBDATE() 函数
MySQL SUBDATE()
函数在指定的日期/时间上减去指定到时间间隔加并返回新的日期/时间。
语法:
SUBDATE(date, days) SUBDATE(date, INTERVAL value unit)
参数说明:
- date:必需的。需要操作的日期。
- days:必需的。在 date 上减去的天数。
- 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相关函数
8.1 TIME() 函数
语法:
TIME(expr)
参数说明:
- 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
8.2 TIME_FORMAT函数
MySQL TIME_FORMAT()
函数按照指定的格式格式化时间。
语法:
TIME_FORMAT(time, format)
参数说明:
- time:必需的。需要格式化的日期。
- format:必需的。格式化模式字符串。可采用的格式化符号:
- %f:微秒 (000000..999999)
- %H:小时 (00..23)
- %h:小时 (01..12)
- %I:小时 (01..12)
- %i:分钟 (00..59)
- %k:小时 (0..23)
- %l:小时 (1..12)
- %p:AM 或者 PM
- %r:十二小时制时间 (hh:mm:ss 后跟 AM 或 PM)
- %S:秒 (00..59)
- %s:秒 (00..59)
- %T:二十四小时制时间 (hh:mm:ss)
- %%:转义 %
返回值:
- 按照指定的格式格式化时间并返回格式化后的字符串。
- 返回
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
8.3 TIME_TO_SEC() 函数
MySQL TIME_TO_SEC()
函数将指定的时间值转为秒数。
语法:
TIME_TO_SEC(time)
参数说明:
- time:必需的。时间。格式:HH:MM:SS 或者 HH:MM 或者 SS。
返回值:
- 将指定的时间值转为秒数。
- 返回
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
8.4 TIMEDIFF() 函数
MySQL TIMEDIFF()
函数返回两个时间之间的差值。
语法:
TIMEDIFF(time1, time2)
参数说明:
- 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
8.5 TIMESTAMP() 函数
MySQL TIMESTAMP()
函数累加所有参数并将结果作为日期时间值返回。
语法:
TIMESTAMP(date_or_datetime) TIMESTAMP(date_or_datetime, time)
参数说明:
- date_or_datetime:必需的。一个日期或者日期时间表达式。格式: YYYY-MM-DD 或者 YYYY-MM-DD HH:MM:SS。
- time:可选的。一个时间值。格式:HH:MM:SS。
返回值:
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
8.6 TIMESTAMPADD() 函数
MySQL TIMESTAMPADD()
函数将指定的时间间隔加到一个日期时间值上并返回结果。
语法:
TIMESTAMPADD(unit, interval, datetime)
参数说明:
- unit:必需的。时间间隔的单位,可用值有: MICROSECOND, SECOND, MINUTE, HOUR, DAY, WEEK, MONTH, QUARTER, YEAR.
- interval:可选的。一个表示时间间隔的整数值。
- datetime:可选的。一个 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
8.7 TIMESTAMPDIFF() 函数
MySQL TIMESTAMPDIFF()
函数返回两个日期时间之间的时间间隔。
语法:
TIMESTAMPDIFF(unit, datetime1, datetime2)
参数说明:
- unit:必需的。时间间隔的单位,可用值有: MICROSECOND, SECOND, MINUTE, HOUR, DAY, WEEK, MONTH, QUARTER, YEAR。
- datetime1:必需的。一个 datetime 值或表达式。
- datetime2:必需的。一个 datetime 值或表达式。
返回值:
- 返回两个日期/日期时间之间的时间间隔。
- 返回
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
8.8 ADDTIME() 函数
MySQL ADDTIME()
函数在指定的时间上加上指定的时间间隔并返回结果。
语法:
ADDTIME(timeExpr1, timeExpr2)
参数说明:
- timeExpr1:必需的。它是一个 datetime 或者 time 表达式。
- 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
8.9 LOCALTIME() 函数
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
8.10 LOCALTIMESTAMP() 函数
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
8.11 MAKETIME() 函数
MySQL MAKETIME()
函数指定的时、分、秒创建一个时间并返回。
语法:
MAKETIME(hour, minute, second)
参数说明:
- hour:必需的。小时。
- minute:必需的。分钟,取值范围从 0 到 59。
- second:必需的。秒,取值范围从 0 到 59。
返回值:
- 指定的时、分、秒创建一个时间并返回。
- 返回
NULL情况:
- 如果
minute
不在0
到59
之间。 - 如果
second
不在0
到59
之间
- MySQL 支持的时间的范围是从
-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
8.12 SEC_TO_TIME() 函数
MySQL SEC_TO_TIME()
函数将指定的秒数转为一个格式为 HH:MM:SS
的时间值。
语法:
SEC_TO_TIME(seconds)
参数说明:
- 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
8.13 SUBTIME() 函数
MySQL SUBTIME()
函数在指定的时间上减去指定的时间间隔并返回结果。
语法:
SUBTIME(timeExpr1, timeExpr2)
参数说明:
- timeExpr1:必需的。它是一个 datetime 或者 time 表达式。
- 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
8.14 UNIX_TIMESTAMP() 函数
MySQL UNIX_TIMESTAMP()
函数将指定的日期/日期时间转为 UNIX 时间戳值。 UNIX 时间戳值是距离 UTC 时间 1970-01-01 00:00:00
的秒数。
语法:
UNIX_TIMESTAMP() UNIX_TIMESTAMP(date_or_datetime)
参数说明:
- date_or_datetime:可选的。默认值为
NOW()
。
返回值:
- 将指定的日期/日期时间转为距离 UTC 时间
1970-01-01 00:00:00
的秒数。 - 返回
NULL情况:
参数为NULL。
示例:
SELECT UNIX_TIMESTAMP(), -- 1697968385 UNIX_TIMESTAMP(NOW()), -- 1697968385 UNIX_TIMESTAMP(NULL) -- NULL
九、CUR相关函数
9.1 CURDATE() 函数
MySQL CURDATE() 函数按 YYYY-MM-DD 或 YYYYMMDD 格式返回系统的当前日期。
CURDATE() 函数与 CURRENT_DATE() 函数完全相同。
语法:
CURDATE()
返回值:
- 当前日期。
示例:
SELECT CURDATE(), -- 2023-10-22 CURDATE() + 0, -- 20231022 CURDATE() + 1; -- 20231023
- + N 表示把日期转为 yyyyMMdd 格式 + N。
9.2 CURRENT_DATE() 函数
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
- + N 表示把日期转为 yyyyMMdd 格式 + N。
9.3 CURRENT_TIME() 函数
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
- + N 表示把时间转为 hhmmss 格式 + N。
9.4 CURRENT_TIMESTAMP() 函数
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
- + N 表示把日期时间转为 yyyyMMddhhmmss 格式 + N。
9.5 CURTIME() 函数
MySQL CURTIME() 函数按 hh:mm:ss 格式返回系统的当前时间。
CURTIME() 函数与 CURRENT_TIME() 函数完全相同。
语法:
CURTIME()
返回值:
- 当前时间。
示例:
SELECT CURTIME(), -- 15:39:13 CURTIME() + 0, -- 153913 CURTIME() + 1 -- 153914
- + N 表示把日期时间转为 hhmmss 格式 + N。
十、其它日期时间函数
10.1 MICROSECOND() 函数
MySQL MICROSECOND()
函数提取时间或日期时间中的微秒部分部分并作为数字返回。
语法:
MICROSECOND(time)
参数说明:
- 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
10.2 SECOND() 函数
MySQL SECOND()
函数提取并返回时间的秒部分。
语法:
SECOND(time)
参数说明:
- time:必需的。一个时间或者日期时间表达式。
返回值:
- 返回时间的秒部分,
SECOND()
函数的返回值介于0
到59
之间。 - 返回 NULL情况:参数为
NULL。
示例:
SELECT SECOND('10:11:12'), -- 12 SECOND('2023-10-24 10:11:12') -- 12
10.3 MINUTE() 函数
MySQL MINUTE()
函数提取并返回时间的分钟部分。
语法:
MINUTE(time)
参数说明:
- time:必需的。一个时间或者日期时间表达式。
返回值:
- 返回值介于
0
到59
之间。 - 返回
NULL情况:
参数为NULL。
示例:
SELECT MINUTE('14:11:12'), -- 11 MINUTE('2023-10-24 14:11:12') -- 11
10.4 HOUR() 函数
MySQL HOUR()
函数提取并返回时间的小时部分。
语法:
HOUR(time)
参数说明:
- time:必需的。一个时间或者日期时间表达式。
返回值:
- 指定的时间或者日期时间中的小时部分并作为数字返回。
- MySQL 支持的最大时间为
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
10.5 DAY() 函数
MySQL DAY() 函数返回日期时间表达式中的代表月份中的一天的数字。此函数等同于 DAYOFMONTH() 函数。
语法:
DAY(expr)
参数说明:
- expr:必需的。一个日期或者日期时间表达式。
返回值:
- 返回日期时间表达式中的代表月份中的一天的数字,从 1 到 31。
- 返回
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
10.6 MONTH() 函数
MySQL MONTH()
函数提取日期的月份部分并作为数字返回。
语法:
MONTH(date)
参数说明:
- date:必需的。一个日期或者日期时间表达式。
返回值:
- 返回值介于
1
到12
之间。 - 返回
NULL情况:
参数为NULL。
示例:
SELECT MONTH('2023-10-24'), -- 10 MONTH('2023-10-24 14:11:12') -- 10
10.7 QUARTER() 函数
MySQL QUARTER()
函数返回一个指定日期所在季度值。
语法:
QUARTER(date)
参数说明:
- 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
10.8 YEAR() 函数
MySQL YEAR()
函数提取日期的年份部分并作为数字返回。
语法:
YEAR(date)
参数说明:
- time:必需的。一个日期或者日期时间表达式。
返回值:
- 返回作为日期的年份部分的数字。返回值是
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
10.9 TO_SECONDS() 函数
MySQL TO_SECONDS()
函数将指定的日期/日期时间转为距离 0 年的秒数并返回结果。
语法:
TO_SECONDS(date_or_datetime)
参数说明:
- date_or_datetime:必需的。一个表示天数的整数值。
返回值:
- 返回指定的日期/日期时间从 0 年开始的秒数。
- 返回
NULL情况:
- 参数为
NULL。
示例:
SELECT TO_SECONDS('2023-10-24'), -- 63865324800 TO_SECONDS('2023-10-24 10:10:14') -- 63865361414
10.10 MONTHNAME() 函数
MySQL MONTHNAME()
函数返回给定日期的月份的名字。
语法:
MONTHNAME(date)
参数说明:
- 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
10.11 PERIOD_ADD() 函数
MySQL PERIOD_ADD()
函数在指定年月上加上指定的月数将结果作为年月返回。
语法:
PERIOD_ADD(period, month_number)
参数说明:
- period:必需的。使用 YYYYMM 或 YYMM 格式表示的时期。
- month_number:必需的。需要加到 period 上的月数。
返回值:
- 指定年月上加上指定的月数将结果作为年月。(格式是
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
10.12 PERIOD_DIFF() 函数
MySQL PERIOD_DIFF()
函数返回两个通过年月指定的时期之间相差的月数。
语法:
PERIOD_DIFF(period1, period2)
参数说明:
- period1:必需的。格式: YYYYMM 或 YYMM。
- period2:必需的。格式: YYYYMM 或 YYMM。
返回值:
- 返回两个通过年月指定的时期之间相差的月数。
示例:
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
10.13 CONVERT_TZ() 函数
MySQL CONVERT_TZ()
函数将一个时区的时间转为另一个时区的时间并返回。
语法:
CONVERT_TZ(datetime, fromTimeZone, toTimeZone)
参数说明:
- datetime:必需的。需要处理的日期时间。
- fromTimeZone:必需的。当前时区的标识。
- toTimeZone:必需的。新的时区的标识。
- fromTimeZone 和 toTimeZone 支持的格式包括:
- 使用 SYSTEM 意味着和当前系统的时区一样。
- 使用
+/-[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
12.14 UTC函数
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