MYSQL日期函数_MYSQL时间函数详解和实战(你想要的都有70多个函数几百种用法建议收藏以备查阅)

MySQL的时间函数用于处理日期和时间数据。以下是一些常用的MySQL时间函数。

内容有点多,建议收藏以备后续用到查阅参考

目录

一、获取当前日期+时间

二、获取当前日期

三、获取当前时间

四、日期时间选取函数(Extract函数)

五、WEEK相关函数

[5.1 WEEK() 函数](#5.1 WEEK() 函数)

[5.2 WEEKDAY() 函数](#5.2 WEEKDAY() 函数)

[5.3 WEEKOFYEAR() 函数](#5.3 WEEKOFYEAR() 函数)

[5.4 YEARWEEK() 函数](#5.4 YEARWEEK() 函数)

六、DAY相关函数

[6.1 DAY() 函数](#6.1 DAY() 函数)

[6.2 DAYNAME() 函数](#6.2 DAYNAME() 函数)

[6.3 DAYOFMONTH() 函数](#6.3 DAYOFMONTH() 函数)

[6.4 DAYOFWEEK() 函数](#6.4 DAYOFWEEK() 函数)

[6.5 DAYOFYEAR() 函数](#6.5 DAYOFYEAR() 函数)

[6.6 FROM_DAYS() 函数](#6.6 FROM_DAYS() 函数)

[6.7 TO_DAYS() 函数](#6.7 TO_DAYS() 函数)

[6.8 LAST_DAY() 函数](#6.8 LAST_DAY() 函数)

七、DATE相关函数

[7.1 DATE() 函数](#7.1 DATE() 函数)

[7.2 DATE_ADD() 函数](#7.2 DATE_ADD() 函数)

[7.3 DATE_FORMAT() 函数](#7.3 DATE_FORMAT() 函数)

[7.4 DATE_SUB() 函数](#7.4 DATE_SUB() 函数)

[7.5 DATEDIFF() 函数](#7.5 DATEDIFF() 函数)

[7.6 ADDDATE() 函数](#7.6 ADDDATE() 函数)

[7.7 MAKEDATE() 函数](#7.7 MAKEDATE() 函数)

[7.8 STR_TO_DATE() 函数](#7.8 STR_TO_DATE() 函数)

[7.9 SUBDATE() 函数](#7.9 SUBDATE() 函数)

八、TIME相关函数

[8.1 TIME() 函数](#8.1 TIME() 函数)

[8.2 TIME_FORMAT函数](#8.2 TIME_FORMAT函数)

[8.3 TIME_TO_SEC() 函数](#8.3 TIME_TO_SEC() 函数)

[8.4 TIMEDIFF() 函数](#8.4 TIMEDIFF() 函数)

[8.5 TIMESTAMP() 函数](#8.5 TIMESTAMP() 函数)

[8.6 TIMESTAMPADD() 函数](#8.6 TIMESTAMPADD() 函数)

[8.7 TIMESTAMPDIFF() 函数](#8.7 TIMESTAMPDIFF() 函数)

[8.8 ADDTIME() 函数](#8.8 ADDTIME() 函数)

[8.9 LOCALTIME() 函数](#8.9 LOCALTIME() 函数)

[8.10 LOCALTIMESTAMP() 函数](#8.10 LOCALTIMESTAMP() 函数)

[8.11 MAKETIME() 函数](#8.11 MAKETIME() 函数)

[8.12 SEC_TO_TIME() 函数](#8.12 SEC_TO_TIME() 函数)

[8.13 SUBTIME() 函数](#8.13 SUBTIME() 函数)

[8.14 UNIX_TIMESTAMP() 函数](#8.14 UNIX_TIMESTAMP() 函数)

九、CUR相关函数

[9.1 CURDATE() 函数](#9.1 CURDATE() 函数)

[9.2 CURRENT_DATE() 函数](#9.2 CURRENT_DATE() 函数)

[9.3 CURRENT_TIME() 函数](#9.3 CURRENT_TIME() 函数)

[9.4 CURRENT_TIMESTAMP() 函数](#9.4 CURRENT_TIMESTAMP() 函数)

[9.5 CURTIME() 函数](#9.5 CURTIME() 函数)

十、其它日期时间函数

[10.1 MICROSECOND() 函数](#10.1 MICROSECOND() 函数)

[10.2 SECOND() 函数](#10.2 SECOND() 函数)

[10.3 MINUTE() 函数](#10.3 MINUTE() 函数)

[10.4 HOUR() 函数](#10.4 HOUR() 函数)

[10.5 DAY() 函数](#10.5 DAY() 函数)

[10.6 MONTH() 函数](#10.6 MONTH() 函数)

[10.7 QUARTER() 函数](#10.7 QUARTER() 函数)

[10.8 YEAR() 函数](#10.8 YEAR() 函数)

[10.9 TO_SECONDS() 函数](#10.9 TO_SECONDS() 函数)

[10.10 MONTHNAME() 函数](#10.10 MONTHNAME() 函数)

[10.11 PERIOD_ADD() 函数](#10.11 PERIOD_ADD() 函数)

[10.12 PERIOD_DIFF() 函数](#10.12 PERIOD_DIFF() 函数)

[10.13 CONVERT_TZ() 函数](#10.13 CONVERT_TZ() 函数)

[12.14 UTC函数](#12.14 UTC函数)


一、获取当前日期+时间

语法:

sql 复制代码
NOW(M)

参数说明:

  • M:非必须。保留的微秒位数,最大值为6。

示例:

sql 复制代码
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()。

二、获取当前日期

sql 复制代码
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()。

三、获取当前时间

语法:

sql 复制代码
CURTIME(M)

参数说明:

  • M:非必须。保留的微秒位数,最大值为6。

示例:

sql 复制代码
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() 函数从指定的日期/时间中提取指定的部分并返回。

语法:

sql 复制代码
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。

示例:

sql 复制代码
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() 函数返回给定日期位于当年的第几周。

语法:

sql 复制代码
WEEK(date)
WEEK(date, mode)

参数说明:

  • date:必需的。一个日期或者日期时间表达式。
  • mode:可选的。确定计算周的逻辑。如果没有指定该参数,默认将使用 default_week_format 变量的值。

返回值:

  • 返回给定日期位于当年的第几周,取值范围为 053
  • 返回 NULL情况:
    • 指定的表达式不是一个合法的日期或者日期时间。
    • 参数为 NULL。

mode 参数的处理逻辑如下:

sql 复制代码
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	

示例:

sql 复制代码
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() 函数返回给定日期的工作日编号。

语法:

sql 复制代码
WEEKDAY(date)

参数说明:

  • date: 必需的。一个日期或者日期时间表达式。

返回值:

  • 0 :Monday
  • 1 :Tuesday
  • 2 :Wednesday
  • 3 :Thursday
  • 4 :Friday
  • 5 :Saturday
  • 6 :Sunday
  • 返回 NULL 情况:
    • 指定的表达式不是一个合法的日期或者日期时间。
    • 参数为 NULL。

示例:

sql 复制代码
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)。

语法:

sql 复制代码
WEEKOFYEAR(date)

参数说明:

  • date:必需的。一个日期或者日期时间表达式。

返回值:

  • 返回给定日期位于当年的第几周,取值范围为 153。
  • 该函数的前提是"一周的第一天是星期一,并且一年中的第一周有 3 天以上",它相当于 WEEK(date,3)。
  • 返回 NULL 情况:
    • 指定的表达式不是一个合法的日期或者日期时间。
    • 参数为 NULL。

示例:

sql 复制代码
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 变量的值。
    *

    sql 复制代码
    mysql> SHOW VARIABLES LIKE 'default_week_format';;
    +---------------------+-----------------+
    | Variable               | Value        |
    +---------------------+-----------------+
    | default_week_format    | 0            |
    +---------------------+-----------------+

5.4 YEARWEEK() 函数

​MySQL YEARWEEK() 函数返回一个表示给定日期所在年份和第几周的数字。此函数与 WEEK() 类似。

语法:

sql 复制代码
YEARWEEK(date)
YEARWEEK(date, mode)

参数说明:

  • date:必需的。一个日期或者日期时间表达式。
  • mode:可选的。确定计算周的逻辑。如果没有指定该参数,默认将使用 default_week_format 变量的值。

返回值:

  • 返回一个表示给定日期所在年份和第几周的数字。
  • 返回 NULL 情况
    • 定的表达式不是一个合法的日期或者日期时间。
    • 参数为 NULL。

mode 参数的处理逻辑如下:

sql 复制代码
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	

示例:

sql 复制代码
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 变量的值。
    *

    sql 复制代码
    mysql> SHOW VARIABLES LIKE 'default_week_format';;
    +---------------------+-----------------+
    | Variable               | Value        |
    +---------------------+-----------------+
    | default_week_format    | 0            |
    +---------------------+-----------------+

六、DAY相关函数

6.1 DAY() 函数

MySQL DAY() 函数返回日期时间表达式中的代表月份中的一天的数字。此函数等同于 DAYOFMONTH() 函数。

语法:

sql 复制代码
DAY(expr)

参数说明:

  • expr:必需的。一个日期或者日期时间表达式。

返回值:

  • 返回日期时间表达式中的代表月份中的一天的数字,从 1 到 31。
  • 返回 NULL情况:
    • 如果指定的表达式不是一个合法的日期或者日期时间。
    • 如果参数为 NULL

示例:

sql 复制代码
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() 函数返回给定日期的工作日名称。

语法:

sql 复制代码
DAYNAME(expr)

参数说明:

  • expr:必需的。一个日期或者日期时间表达式。

返回值:

  • 返回给定日期的工作日名称,返回值将是以下值中的一个: Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday
  • 返回 NULL情况:
    • 指定的表达式不是一个合法的日期或者日期时间。
    • 参数为 NULL。

示例:

sql 复制代码
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() 函数。

语法:

sql 复制代码
DAYOFMONTH(expr)

参数说明:

  • expr:必需的。一个日期或者日期时间表达式。

返回值:

  • 返回日期时间表达式中的代表月份中的一天的数字,从 1 到 31。
  • 如果给定的日期的天的部分为 0 ,比如: '0000-00-00''2008-00-00'DAYOFMONTH() 函数将返回 0。
  • 返回 NULL情况:
    • 表达式不是一个合法的日期或者日期时间。
    • 参数为 NULL

示例:

sql 复制代码
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() 函数返回给定日期的工作日的索引。

语法:

sql 复制代码
DAYOFWEEK(expr)

参数说明:

  • expr:必需的。一个日期或者日期时间表达式。

返回值:

  • 返回一个从 17 之间的数字,代表的含义如下:
    • 1:星期天
    • 2:星期一
    • 3:星期二
    • 4:星期三
    • 5:星期四
    • 6:星期五
    • 7:星期六
  • 返回 NULL情况:
    • 指定的表达式不是一个合法的日期或者日期时间。
    • 参数为 NULL

示例:

sql 复制代码
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() 函数返回一个从 1366 代表给定日期是一年中的第几天的数字。

语法:

sql 复制代码
DAYOFYEAR(expr)

参数说明:

  • expr:必需的。一个日期或者日期时间表达式。

返回值:

  • 返回一个从 1366 代表给定日期是一年中的第几天的数字。
  • 返回 NULL情况:
    • 指定的表达式不是一个合法的日期或者日期时间。
    • 参数为 NULL。

示例:

sql 复制代码
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() 函数是相反的。

语法:

sql 复制代码
FROM_DAYS(days)

参数说明:

  • days:必需的。一个表示天数的整数值。

返回值:

  • 返回一个由指定天数表示的日期。
  • 返回 NULL情况:
    • 参数为 NULL。

示例:

sql 复制代码
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() 函数是相反的。

语法:

sql 复制代码
TO_DAYS(date)

参数说明:

  • date:必需的。一个日期值。

返回值:

  • 返回指定的日期从 0 年开始的天数。
  • 返回 NULL情况:
    • 参数为 NULL。

示例:

sql 复制代码
SELECT
    TO_DAYS('2023-10-21'),	                        -- 739179
    TO_DAYS(now());	                                -- 739180

6.8 LAST_DAY() 函数

MySQL LAST_DAY() 函数返回指定的日期或者日期时间所在当月的最后一天。

语法:

sql 复制代码
LAST_DAY(date)

参数说明:

  • date:必需的。一个日期或者日期时间表达式。

返回值:

  • 返回指定的日期或者日期时间所在当月的最后一天。
  • 返回 NULL情况:
    • 参数为不合法的日期。
    • 参数为 NULL。

示例:

sql 复制代码
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() 函数从日期时间表达式中提取日期部分并返回。

语法:

sql 复制代码
DATE(expr)

参数说明:

  • expr:必需的。一个日期或者日期时间表达式。

返回值:

  • 返回指定的日期或者日期时间表达式中的日期部分。
  • 返回 NULL情况:
    • 指定的表达式不是一个合法的日期或者日期时间。
    • 参数为 NULL。

示例:

sql 复制代码
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() 函数在指定的日期/时间上加上指定到时间间隔加并返回新的日期/时间。

语法:

sql 复制代码
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。
  • 其它情况返回字符串。

示例:

sql 复制代码
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_TIMSTAMPCURRENT_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。

示例:

sql 复制代码
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() 函数在指定的日期/时间上减去指定到时间间隔加并返回新的日期/时间。

语法:

sql 复制代码
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:dateDATE 类型,且时间间隔为 YEAR, MONTH 或者 DAY。
    • 返回 TIME:dateTIME 且计算只涉及 HOURS, MINUTESSECONDS 部分。
    • 返回 DATETIME:
      • dateDATE 类型,并且时间间隔为 HOURS, MINUTES 或者 SECONDS。
      • dateDATETIME 类型。
      • dateTIME 类型,并且时间间隔为 YEAR, MONTH 或者 DAY
  • 其他情况下返回字符串。

示例:

sql 复制代码
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() 函数返回两个日期值之间的天数。

语法:

sql 复制代码
DATEDIFF(date1, date2)

参数说明:

  • date1:必需的。一个日期或者日期时间表达式*。*
  • date2:必需的。一个日期或者日期时间表达式*。*

返回值:

  • 返回两个日期值之间的天数。
  • 返回 NULL情况:
    • 指定的表达式不是一个合法的日期或者日期时间。
    • 参数为 NULL。

示例:

sql 复制代码
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() 函数在指定的日期/时间上加上指定到时间间隔加并返回新的日期/时间。

语法:

sql 复制代码
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情况:dateDATE 类型,且时间间隔为 YEAR, MONTH 或者 DAY。
  • 返回 TIME情况:dateTIME 类型,且计算只涉及 HOURS, MINUTESSECONDS 部分。
  • 返回 DATETIME情况:
    • date 参数是 DATE 类型,并且时间间隔为 HOURS, MINUTES 或者 SECONDS。
    • date 参数是 DATETIME 类型。
    • date 参数是 TIME 类型,并且时间间隔为 YEAR, MONTH 或者 DAY。
  • 其他情况下返回字符串。

示例:

sql 复制代码
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() 函数根据年份和一年中天数创建一个日期并返回。

语法:

sql 复制代码
MAKEDATE(year, day_of_year)

参数说明:

  • year:必需的。表示年份的 4 位数字。
  • day_of_year:必需的。一年中的第几天。应该大于 0。

返回值:

  • 根据年份和一年中天数创建一个日期并返回。
  • 返回 NULL情况:
    • day_of_year 等于或小于 0。

示例:

sql 复制代码
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() 函数是相反的。

语法:

sql 复制代码
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。

示例:

sql 复制代码
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() 函数在指定的日期/时间上减去指定到时间间隔加并返回新的日期/时间。

语法:

sql 复制代码
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情况:dateDATE 类型,且时间间隔为 YEAR, MONTH 或者 DAY。
  • 返回 TIME情况:dateTIME 类型,且计算只涉及 HOURS, MINUTESSECONDS 部分。
  • 返回 DATETIME情况:
    • dateDATE 类型,且时间间隔为 HOURS, MINUTES 或者 SECONDS。
    • 如果 dateDATETIME 类型。
    • dateTIME 类型,且时间间隔为 YEAR, MONTH 或者 DAY。
  • 其他情况下返回字符串。

示例:

sql 复制代码
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() 函数

语法:

sql 复制代码
TIME(expr)

参数说明:

  • expr:必需的。一个日期或者日期时间表达式。

返回值:

  • 返回指定的时间或者日期时间中的时间部分。
  • 返回 NULL情况:
    • 指定的表达式不是一个合法的时间或者日期时间。
    • 参数为 NULL。

示例:

sql 复制代码
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() 函数按照指定的格式格式化时间。

语法:

sql 复制代码
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。

示例:

sql 复制代码
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() 函数将指定的时间值转为秒数。

语法:

sql 复制代码
TIME_TO_SEC(time)

参数说明:

  • time:必需的。时间。格式:HH:MM:SS 或者 HH:MM 或者 SS。

返回值:

  • 将指定的时间值转为秒数。
  • 返回 NULL情况:参数为 NULL。

示例:

sql 复制代码
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() 函数返回两个时间之间的差值。

语法:

sql 复制代码
TIMEDIFF(time1, time2)

参数说明:

  • time1:必需的。一个时间或者日期时间表达式。
  • time2:必需的。另一个时间或者日期时间表达式。

返回值:

  • 返回两个时间之间的差值,它返回一个 HH:MM:SS 格式的时间值。
  • 返回 NULL情况:
    • 指定的表达式不是一个合法的时间或者日期时间。
    • 参数为 NULL。

示例:

sql 复制代码
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.5TIMESTAMP() 函数

MySQL TIMESTAMP() 函数累加所有参数并将结果作为日期时间值返回。

语法:

sql 复制代码
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_datetimetime 的和作为日期时间值返回。
  • 返回 NULL情况:任何一个参数为 NULL。

示例:

sql 复制代码
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() 函数将指定的时间间隔加到一个日期时间值上并返回结果。

语法:

sql 复制代码
TIMESTAMPADD(unit, interval, datetime)

参数说明:

  • unit:必需的。时间间隔的单位,可用值有: MICROSECOND, SECOND, MINUTE, HOUR, DAY, WEEK, MONTH, QUARTER, YEAR.
  • interval:可选的。一个表示时间间隔的整数值。
  • datetime:可选的。一个 datetime 值或表达式*。*

返回值:

  • 将指定的时间间隔 interval 加到一个日期时间值上并返回结果。
  • 返回 NULL情况:任何一个参数为 NULL。

示例:

sql 复制代码
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() 函数返回两个日期时间之间的时间间隔。

语法:

sql 复制代码
TIMESTAMPDIFF(unit, datetime1, datetime2)

参数说明:

  • unit:必需的。时间间隔的单位,可用值有: MICROSECOND, SECOND, MINUTE, HOUR, DAY, WEEK, MONTH, QUARTER, YEAR。
  • datetime1:必需的。一个 datetime 值或表达式。
  • datetime2:必需的。一个 datetime 值或表达式。

返回值:

  • 返回两个日期/日期时间之间的时间间隔。
  • 返回 NULL情况:任何一个参数为 NULL。

示例:

sql 复制代码
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() 函数在指定的时间上加上指定的时间间隔并返回结果。

语法:

sql 复制代码
ADDTIME(timeExpr1, timeExpr2)

参数说明:

  • timeExpr1:必需的。它是一个 datetime 或者 time 表达式。
  • timeExpr2:必需的。它是个时间表达式。它可以是正数或者负数。

返回值:

  • timeExpr2 加到 timeExpr1 上,并返回结果。
  • 按如下规则确定返回值的类型:
    • timeExpr1 参数是动态类型,ADDTIME() 函数返回值类型为 TIME
    • 否则,ADDTIME() 函数返回的数据类型和第一个参数一样。

示例:

sql 复制代码
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() 函数完全相同。

语法:

sql 复制代码
LOCALTIME
LOCALTIME()

返回值:

  • 当前时间和日期。

示例:

sql 复制代码
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() 函数完全相同。

语法:

sql 复制代码
LOCALTIMESTAMP
LOCALTIMESTAMP()

返回值:

  • 当前时间和日期。

示例:

sql 复制代码
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() 函数指定的时、分、秒创建一个时间并返回。

语法:

sql 复制代码
MAKETIME(hour, minute, second)

参数说明:

  • hour:必需的。小时。
  • minute:必需的。分钟,取值范围从 0 到 59。
  • second:必需的。秒,取值范围从 0 到 59。

返回值:

  • 指定的时、分、秒创建一个时间并返回。
  • 返回 NULL情况:
    • ​​​​​​​如果 minute 不在 059 之间。
    • 如果 second 不在 059 之间
  • MySQL 支持的时间的范围是从 -838:59:59838:59:59

示例:

sql 复制代码
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 的时间值。

语法:

sql 复制代码
SEC_TO_TIME(seconds)

参数说明:

  • *seconds:*必需的。秒数。

返回值:

  • 返回一个格式为 HH:MM:SS 的时间值。
  • 返回 NULL情况:参数为 NULL。

示例:

sql 复制代码
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() 函数在指定的时间上减去指定的时间间隔并返回结果。

语法:

sql 复制代码
SUBTIME(timeExpr1, timeExpr2)

参数说明:

  • timeExpr1:必需的。它是一个 datetime 或者 time 表达式。
  • timeExpr2:必需的。它是个时间表达式。它可以是正数或者负数。

返回值:

  • timeExpr1 中减去 timeExpr2,并返回结果。
  • 按如下规则确定返回值的类型:
    • timeExpr1 参数是动态类型,SUBTIME() 函数返回值类型为 TIME
    • 否则,SUBTIME() 函数返回的数据类型和第一个参数一样。

示例:

sql 复制代码
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 的秒数。

语法:

sql 复制代码
UNIX_TIMESTAMP()
UNIX_TIMESTAMP(date_or_datetime)

参数说明:

  • date_or_datetime: 可选的。默认值为 NOW()

返回值:

  • 将指定的日期/日期时间转为距离 UTC 时间 1970-01-01 00:00:00 的秒数。
  • 返回 NULL情况:参数为 NULL。

示例:

sql 复制代码
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() 函数完全相同。

语法:

sql 复制代码
CURDATE()

返回值:

  • 当前日期。

示例:

sql 复制代码
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() 函数完全相同。

语法:

sql 复制代码
CURRENT_DATE
CURRENT_DATE()

返回值:

  • 当前日期。

示例:

sql 复制代码
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() 函数完全相同。

语法:

sql 复制代码
CURRENT_TIME
CURRENT_TIME()

返回值:

  • 当前时间。

示例:

sql 复制代码
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() 函数完全相同。

语法:

sql 复制代码
CURRENT_TIMESTAMP
CURRENT_TIMESTAMP()

返回值:

  • 当前时间和日。

示例:

sql 复制代码
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() 函数完全相同。

语法:

sql 复制代码
CURTIME()

返回值:

  • 当前时间。

示例:

sql 复制代码
SELECT
	CURTIME(), 			                            -- 15:39:13
	CURTIME() + 0, 	                                -- 153913
	CURTIME() + 1	                                -- 153914
    • N 表示把日期时间转为 hhmmss 格式 + N。

十、其它日期时间函数

10.1 MICROSECOND() 函数

MySQL MICROSECOND() 函数提取时间或日期时间中的微秒部分部分并作为数字返回。

语法:

sql 复制代码
MICROSECOND(time)

参数说明:

  • time:必需的。一个日期或者日期时间表达式。

返回值:

  • 提取时间或日期时间中的微秒部分部分并作为数字返回。
    • 值是介于 0999999 之间的数字。
  • 返回 NULL情况:参数为 NULL。

示例:

sql 复制代码
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() 函数提取并返回时间的秒部分。

语法:

sql 复制代码
SECOND(time)

参数说明:

  • *time:*必需的。一个时间或者日期时间表达式。

返回值:

  • 返回时间的秒部分,SECOND() 函数的返回值介于 059 之间。
  • 返回 NULL情况:参数为 NULL。

示例:

sql 复制代码
SELECT
    SECOND('10:11:12'),	                            -- 12
    SECOND('2023-10-24 10:11:12')	                -- 12

10.3 MINUTE() 函数

MySQL MINUTE() 函数提取并返回时间的分钟部分。

语法:

sql 复制代码
MINUTE(time)

参数说明:

  • time:必需的。一个时间或者日期时间表达式。

返回值:

  • 返回值介于 059 之间。
  • 返回 NULL情况:参数为 NULL。

示例:

sql 复制代码
SELECT
    MINUTE('14:11:12'),                              -- 11
    MINUTE('2023-10-24 14:11:12')	                 -- 11

10.4 HOUR() 函数

MySQL HOUR() 函数提取并返回时间的小时部分。

语法:

sql 复制代码
HOUR(time)

参数说明:

  • time:必需的。一个时间或者日期时间表达式。

返回值:

  • 指定的时间或者日期时间中的小时部分并作为数字返回。
  • MySQL 支持的最大时间为 838:59:59HOUR() 函数的最大返回值是 838。
  • 返回 0:如果 time 中没有小时部分。
  • 返回 NULL:参数为 NULL。

示例:

sql 复制代码
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() 函数。

语法:

sql 复制代码
DAY(expr)

参数说明:

  • expr:必需的。一个日期或者日期时间表达式。

返回值:

  • 返回日期时间表达式中的代表月份中的一天的数字,从 1 到 31。
  • 返回 NULL情况:
    • 如果指定的表达式不是一个合法的日期或者日期时间。
    • 如果参数为 NULL

示例:

sql 复制代码
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() 函数提取日期的月份部分并作为数字返回。

语法:

sql 复制代码
MONTH(date)

参数说明:

  • date:必需的。一个日期或者日期时间表达式。

返回值:

  • 返回值介于 112 之间。
  • 返回 NULL情况:参数为 NULL。

示例:

sql 复制代码
SELECT
    MONTH('2023-10-24'),			                -- 10
    MONTH('2023-10-24 14:11:12')	                -- 10

10.7 QUARTER() 函数

MySQL QUARTER() 函数返回一个指定日期所在季度值。

语法:

sql 复制代码
QUARTER(date)

参数说明:

  • date:必需的。一个日期或者日期时间表达式。

返回值:

  • 返回一个指定日期所在季度值。返回值介于 14 之间:
    • 1: 第一季度,即 1 月到 3 月。
    • 2: 第二季度,即 4 月到 6 月。
    • 3: 第三季度,即 7 月到 9 月。
    • 4: 第四季度,即 10 月到 12 月。
  • 返回 NULL:参数为 NULL。

示例:

sql 复制代码
SELECT
    QUARTER('2023-10-24'),			                -- 4
    QUARTER('2023-10-24 10:11:12')	                -- 4

10.8 YEAR() 函数

MySQL YEAR() 函数提取日期的年份部分并作为数字返回。

语法:

sql 复制代码
YEAR(date)

参数说明:

  • time:必需的。一个日期或者日期时间表达式。

返回值:

  • 返回作为日期的年份部分的数字。返回值是 0 或者介于 10009999 之间的数字。
  • 返回 NULL情况:参数为 NULL。

示例:

sql 复制代码
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 年的秒数并返回结果。

语法:

sql 复制代码
TO_SECONDS(date_or_datetime)

参数说明:

  • date_or_datetime:必需的。一个表示天数的整数值。

返回值:

  • 返回指定的日期/日期时间从 0 年开始的秒数。
  • 返回 NULL情况:
    • 参数为 NULL。

示例:

sql 复制代码
SELECT
    TO_SECONDS('2023-10-24'),			            -- 63865324800
    TO_SECONDS('2023-10-24 10:10:14')	            -- 63865361414

10.10 MONTHNAME() 函数

MySQL MONTHNAME() 函数返回给定日期的月份的名字。

语法:

sql 复制代码
MONTHNAME(date)

参数说明:

  • date:必需的。一个日期或者日期时间表达式。

返回值:

  • 返回给定日期的月份的名字。返回值以下值中的一个:
    • January。
    • February。
    • March。
    • April。
    • May。
    • June。
    • July。
    • August。
    • September。
    • October。
    • November。
    • December
  • 返回 NULL情况:
    • ​​​​​​​指定的表达式不是一个合法的日期或者日期时间。
    • 参数为 NULL。

示例:

sql 复制代码
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() 函数在指定年月上加上指定的月数将结果作为年月返回。

语法:

sql 复制代码
PERIOD_ADD(period, month_number)

参数说明:

  • period:必需的。使用 YYYYMM 或 YYMM 格式表示的时期。
  • month_number:必需的。需要加到 period 上的月数*。*

返回值:

  • 指定年月上加上指定的月数将结果作为年月。(格式是 YYYYMM)
  • 返回 NULL情况:参数为 NULL。

示例:

sql 复制代码
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() 函数返回两个通过年月指定的时期之间相差的月数。

语法:

sql 复制代码
PERIOD_DIFF(period1, period2)

参数说明:

  • period1:必需的。格式: YYYYMM 或 YYMM。
  • period2:必需的。格式: YYYYMM 或 YYMM。

返回值:

  • 返回两个通过年月指定的时期之间相差的月数。

示例:

sql 复制代码
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() 函数将一个时区的时间转为另一个时区的时间并返回。

语法:

sql 复制代码
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'

返回值:

  • 返回新时区的日期时间。
  • 参数错误或者为 NULLCONVERT_TZ() 函数将返回 NULL

示例:

sql 复制代码
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

相关推荐
Hello.Reader26 分钟前
StarRocks实时分析数据库的基础与应用
大数据·数据库
执键行天涯28 分钟前
【经验帖】JAVA中同方法,两次调用Mybatis,一次更新,一次查询,同一事务,第一次修改对第二次的可见性如何
java·数据库·mybatis
liupenglove33 分钟前
golang操作mysql利器-gorm
mysql·golang
yanglamei196238 分钟前
基于GIKT深度知识追踪模型的习题推荐系统源代码+数据库+使用说明,后端采用flask,前端采用vue
前端·数据库·flask
叫我:松哥1 小时前
基于Python flask的医院管理学院,医生能够增加/删除/修改/删除病人的数据信息,有可视化分析
javascript·后端·python·mysql·信息可视化·flask·bootstrap
工作中的程序员1 小时前
ES 索引或索引模板
大数据·数据库·elasticsearch
严格格1 小时前
三范式,面试重点
数据库·面试·职场和发展
微刻时光1 小时前
Redis集群知识及实战
数据库·redis·笔记·学习·程序人生·缓存
单字叶2 小时前
MySQL数据库
数据库·mysql
mqiqe2 小时前
PostgreSQL 基础操作
数据库·postgresql·oracle