0


轻松驾驭时间流:MYSQL日期与时间函数的实用技巧

​🌈 个人主页:danci_
🔥 系列专栏:《MYSQL应用》
💪🏻 制定明确可量化的目标,坚持默默的做事。


轻松驾驭时间流:MYSQL日期与时间函数的实用技巧

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 变量的值。

返回值:

  • 返回给定日期位于当年的第几周,取值范围为 053
  • 返回 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:必需的。一个日期或者日期时间表达式。

返回值:

  • 返回给定日期位于当年的第几周,取值范围为 153。
  • 该函数的前提是“一周的第一天是星期一,并且一年中的第一周有 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:必需的。一个日期或者日期时间表达式。

返回值:

  • 返回一个从 17 之间的数字,代表的含义如下: - 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:必需的。一个日期或者日期时间表达式。

返回值:

  • 返回一个从 1366 代表给定日期是一年中的第几天的数字。
  • 返回 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_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。

示例:

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:dateDATE 类型,且时间间隔为 YEAR, MONTH 或者 DAY。- 返回 TIME:dateTIME 且计算只涉及 HOURS, MINUTESSECONDS 部分。- 返回 DATETIME:- dateDATE 类型,并且时间间隔为 HOURS, MINUTES 或者 SECONDS。- dateDATETIME 类型。- dateTIME 类型,并且时间间隔为 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情况:dateDATE 类型,且时间间隔为 YEAR, MONTH 或者 DAY。
  • 返回 TIME情况:dateTIME 类型,且计算只涉及 HOURS, MINUTESSECONDS 部分。
  • 返回 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情况:dateDATE 类型,且时间间隔为 YEAR, MONTH 或者 DAY。
  • 返回 TIME情况:dateTIME 类型,且计算只涉及 HOURS, MINUTESSECONDS 部分。
  • 返回 DATETIME情况:- dateDATE 类型,且时间间隔为 HOURS, MINUTES 或者 SECONDS。- 如果 dateDATETIME 类型。- dateTIME 类型,且时间间隔为 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_datetimetime 的和作为日期时间值返回。
  • 返回 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 不在 059 之间。- 如果 second 不在 059 之间
  • MySQL 支持的时间的范围是从 -838:59:59838: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:必需的。一个日期或者日期时间表达式。

返回值:

  • 提取时间或日期时间中的微秒部分部分并作为数字返回。 - 值是介于 0999999 之间的数字。
  • 返回 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() 函数的返回值介于 059 之间。
  • 返回 NULL情况:参数为 NULL。

示例:

SELECT
    SECOND('10:11:12'),                                -- 12
    SECOND('2023-10-24 10:11:12')                    -- 12

10.3 MINUTE() 函数

MySQL

MINUTE()

函数提取并返回时间的分钟部分。

语法:

MINUTE(time)

参数说明:

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

返回值:

  • 返回值介于 059 之间。
  • 返回 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:59HOUR() 函数的最大返回值是 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:必需的。一个日期或者日期时间表达式。

返回值:

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

示例:

SELECT
    MONTH('2023-10-24'),                            -- 10
    MONTH('2023-10-24 14:11:12')                    -- 10

10.7 QUARTER() 函数

MySQL

QUARTER()

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

语法:

QUARTER(date)

参数说明:

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

返回值:

  • 返回一个指定日期所在季度值。返回值介于 14 之间: - 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 或者介于 10009999 之间的数字。
  • 返回 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'

返回值:

  • 返回新时区的日期时间。
  • 参数错误或者为 NULLCONVERT_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

本文转载自: https://blog.csdn.net/danci_/article/details/136720309
版权归原作者 danci_btq 所有, 如有侵权,请联系我们删除。

“轻松驾驭时间流:MYSQL日期与时间函数的实用技巧”的评论:

还没有评论