• MySQL日期函数


    目录

    0 特殊时间参数说明

    1 日期函数

    1.1 DATE

    1.2 DATE_FORMAT

    1.3 ADDDATE, DATE_ADD

    1.4  DATE_SUB

    1.5  DATEDIFF

    1.6 CURDATE(), CURRENT_DATE, CURRENT_DATE()

    2 日期时间函数

    2.1 CURTIME(),CURRENT_TIME

    2.2 ADDTIME

    2.3 TIME

    2.4 TIMEDIFF

    2.5 TIME_TO_SEC

    2.6 SEC_TO_TIME

    2.7 TIMESTAMP

    2.8 TIMESTAMPDIFF

    2.9 TIMESTAMPADD

    2.10 UNIX_TIMESTAMP

    2.11 FROM_UNIXTIME

    2.12 EXTRACT

    2.13 datetime各部位函数

    2.14 UTC 时间相关函数

    3 日期时间格式设置函数

    3.1 DATE_FORMAT

    3.2 TIME_FORMAT

    3.3 STR_TO_DATE

    3.4 FROM_UNIXTIME

    4 附录

    4.1 MYSQL日期时间格式表

    4.2 时间unit参数

    4.3 Temporal Interval 表达式


    0 特殊时间参数说明

    1. 日期时间格式说明见附录4.1
    2. 普通时间单位unit参数附录4.2 
    3. EXTRACT 函数和INTERVAL的unit时间单位参数见附录4.3

    1 日期函数

    1.1 DATE

    语法

    DATE(expr)

    示例

    1. SELECT
    2. DATE( '2022-08-20' ),
    3. DATE( '2022-08-20 12:12:11' ),
    4. DATE( '2022/05/20' ),
    5. DATE( '2022-05-20T10:20:33' )
    6. FROM DUAL;
    7. # 2022-08-20, 2022-08-20, 2022-05-20, 2022-05-20

    1.2 DATE_FORMAT

    语法

    DATE_FORMAT(date,format)

    示例

    1. SELECT DATE_FORMAT('2022-08-20','%Y/%m/%d'); # 2022/08/20
    2. SELECT DATE_FORMAT('2022-08-20','%Y%m%d'); # 20220820
    3. SELECT DATE_FORMAT('2022-08-20','%Y'); # 2022

    1.3 ADDDATE, DATE_ADD

    语法

    ADDDATE(date,INTERVAL expr unit), DATE_ADD(date,INTERVAL expr unit)

    示例

    1. # ADDDATE
    2. SELECT ADDDATE('2021-01-01', INTERVAL 1 DAY) FROM DUAL; # 2021-01-02
    3. SELECT ADDDATE('2021-01-31',INTERVAL 1 MONTH) FROM DUAL; # 2021-02-28
    4. SELECT ADDDATE('2021-01-31',INTERVAL 1 YEAR) FROM DUAL; # 2022-01-31
    5. # DATE_ADD
    6. mysql> SELECT DATE_ADD('2018-05-01',INTERVAL 1 DAY);
    7. -> '2018-05-02'
    8. mysql> SELECT DATE_SUB('2018-05-01',INTERVAL 1 YEAR);
    9. -> '2017-05-01'
    10. mysql> SELECT DATE_ADD('2020-12-31 23:59:59',
    11. -> INTERVAL 1 SECOND);
    12. -> '2021-01-01 00:00:00'
    13. mysql> SELECT DATE_ADD('2018-12-31 23:59:59',
    14. -> INTERVAL 1 DAY);
    15. -> '2019-01-01 23:59:59'
    16. mysql> SELECT DATE_ADD('2100-12-31 23:59:59',
    17. -> INTERVAL '1:1' MINUTE_SECOND);
    18. -> '2101-01-01 00:01:00'
    19. mysql> SELECT DATE_SUB('2025-01-01 00:00:00',
    20. -> INTERVAL '1 1:1:1' DAY_SECOND);

    1.4  DATE_SUB

    语法

    DATE_SUB(date,INTERVAL expr unit)

    示例

    1. SELECT DATE_SUB('2021-03-31',INTERVAL 1 DAY); # 2021-03-30
    2. SELECT DATE_SUB('2021-03-31',INTERVAL 1 MONTH); # 2021-02-28
    3. SELECT DATE_SUB('2021-03-31',INTERVAL 1 YEAR); # 2020-03-31

    1.5  DATEDIFF

    语法

    DATEDIFF(expr1,expr2)

    示例

    1. SELECT DATEDIFF('2022-08-20','2021-08-19'); # 366
    2. SELECT DATEDIFF('2022-08-20','2022-08-19'); # 1

    1.6 CURDATE(), CURRENT_DATE, CURRENT_DATE()

    语法

    CURDATE(), CURRENT_DATE, CURRENT_DATE()

    示例

    1. select CURDATE(), CURRENT_DATE, CURRENT_DATE() FROM DUAL
    2. # 2022-08-20, 2022-08-20, 2022-08-20

    2 日期时间函数

    2.1 CURTIME(),CURRENT_TIME

    语法

    CURTIME(),CURRENT_TIME

    示例

    1. mysql> SELECT CURTIME(),CURRENT_TIME
    2. -> '14:59:28', '14:59:28'

    2.2 ADDTIME

    语法

    ADDTIME(expr1,expr2)

    将 expr1 和 expr2 表示的时间值相加

    示例

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

    2.3 TIME

    语法

    TIME(expr)

    提取日期时间中的时间部分

    示例

    1. mysql> SELECT TIME('2003-12-31 01:02:03');
    2. -> '01:02:03'
    3. mysql> SELECT TIME('2003-12-31 01:02:03.000123');
    4. -> '01:02:03.000123'

    2.4 TIMEDIFF

    语法

    TIMEDIFF(expr1,expr2)

    返回 expr1 expr2 运算结果表示的一个时间值

    示例

    1. mysql> SELECT TIMEDIFF('2000:01:01 00:00:00','2000:01:01 00:00:00.000001');
    2. -> '-00:00:00.000001'
    3. mysql> SELECT TIMEDIFF('2008-12-31 23:59:59.000001','2008-12-30 01:01:01.000002');
    4. -> '46:58:57.999999'

    2.5 TIME_TO_SEC

    语法

    TIME_TO_SEC(time)

    将时间表示的值转为秒数

    示例

    1. mysql> SELECT TIME_TO_SEC('22:23:00');
    2. -> 80580
    3. mysql> SELECT TIME_TO_SEC('00:39:38');
    4. -> 2378

    2.6 SEC_TO_TIME

    语法

    SEC_TO_TIME(seconds)

    函数功能

    将指定的秒数转换成time格式(hh:mm:ss)

    示例

    1. mysql> SELECT SEC_TO_TIME(2378);
    2. -> '00:39:38'
    3. mysql> SELECT SEC_TO_TIME(2378) + 0;
    4. -> 3938

    2.7 TIMESTAMP

    语法

    TIMESTAMP(expr ) ,   TIMESTAMP( expr1 , expr2 )

    函数功能

    将指定日期或者日期时间表示成datetime格式

    参数说明:

    当只有一个参数时
    直接格式化即可,参数必须是date或者datetime格式
    当函数有两个参数时
    先将两个参数值相加,然后表示成datetime时间格式。
    参数1必须是date或者datetime,参数2必须是time格式(不能含有date部分)
    当传入的参数不满足上面的约束时,会出现奇怪结果

    示例

    1. mysql> SELECT TIMESTAMP('2003-12-31');
    2. -> '2003-12-31 00:00:00'
    3. mysql> SELECT TIMESTAMP('2003-12-31 12:00:00','12:00:00');
    4. -> '2004-01-01 00:00:00'

    2.8 TIMESTAMPDIFF

    语法

    TIMESTAMPDIFF(unit , datetime_expr1 , datetime_expr2 )

    函数功能

    两个日期时间相差的指定unit时间单位数
    unit单位可取的值
    MICROSECOND (microseconds), SECOND , MINUTE , HOUR , DAY , WEEK , MONTH , QUARTER , YEAR .

    示例

    1. mysql> SELECT TIMESTAMPDIFF(MONTH,'2003-02-01','2003-05-01');
    2. -> 3
    3. mysql> SELECT TIMESTAMPDIFF(YEAR,'2002-05-01','2001-01-01');
    4. -> -1
    5. mysql> SELECT TIMESTAMPDIFF(MINUTE,'2003-02-01','2003-05-01 12:05:55');
    6. -> 128885
     

    2.9 TIMESTAMPADD

    语法

    TIMESTAMPADD(unit , interval , datetime_expr )
    函数功能
    将指定unit时间单位数加到 datetime_expr表示的时间上

    示例

    1. mysql> SELECT TIMESTAMPADD(MINUTE,1,'2003-01-02');
    2. -> '2003-01-02 00:01:00'
    3. mysql> SELECT TIMESTAMPADD(WEEK,1,'2003-01-02');
    4. -> '2003-01-09'

    2.10 UNIX_TIMESTAMP

    语法

    UNIX_TIMESTAMP([date])

    返回指定日期时间的时间戳

    示例

    1. mysql> SELECT UNIX_TIMESTAMP();
    2. -> 1447431666
    3. mysql> SELECT UNIX_TIMESTAMP('2015-11-13 10:20:19');
    4. -> 1447431619
    5. mysql> SELECT UNIX_TIMESTAMP('2015-11-13 10:20:19.012');
    6. -> 1447431619.012

    2.11 FROM_UNIXTIME

    语法

    FROM_UNIXTIME( unix_timestamp [, format ])
    函数功能
    将时间戳转换成指定格式的datetime格式

    示例

    1. mysql> SELECT FROM_UNIXTIME(1447430881);
    2. -> '2015-11-13 10:08:01'
    3. mysql> SELECT FROM_UNIXTIME(1447430881) + 0;
    4. -> 20151113100801
    5. mysql> SELECT FROM_UNIXTIME(1447430881,
    6. -> '%Y %D %M %h:%i:%s %x');
    7. -> '2015 13th November 10:08:01 2015'

    2.12 EXTRACT

    语法

    EXTRACT( unit FROM date )
    函数功能
    从datetime日期时间值里面抽取指定的unit时间单位部分
    此处的unit时间单位值参考附录中【Temporal Interval 表达式】

    示例

    1. mysql> SELECT EXTRACT(YEAR FROM '2019-07-02');
    2. -> 2019
    3. mysql> SELECT EXTRACT(YEAR_MONTH FROM '2019-07-02 01:02:03');
    4. -> 201907
    5. mysql> SELECT EXTRACT(DAY_MINUTE FROM '2019-07-02 01:02:03');
    6. -> 20102
    7. mysql> SELECT EXTRACT(MICROSECOND FROM '2003-01-02 10:30:00.000123');
    8. -> 123

    2.13 datetime各部位函数

    示例

    1. SELECT SECOND('2022-08-20 20:01:30') # 30
    2. SELECT SECOND('20:01:24') # 24
    3. SELECT MINUTE('2022-08-20 20:01:30') # 1
    4. SELECT MINUTE('20:02:24') # 2
    5. SELECT HOUR('2022-08-20 20:01:30') # 20
    6. SELECT HOUR('09:02:24') # 2
    7. SELECT DAY('2022-08-12 20:01:30') # 12
    8. SELECT DAY('2022-08-12') # 12
    9. SELECT MONTH('2022-08-12 20:01:30') # 8
    10. SELECT MONTH('2022-08-12') # 12 # 8
    11. SELECT YEAR('2022-08-12 20:01:30') # 2022
    12. SELECT YEAR('2022-08-12') # 2022

    2.14 UTC 时间相关函数

    示例

    1. mysql> SELECT UTC_DATE(), UTC_DATE() + 0;
    2. -> '2003-08-14', 20030814
    3. mysql> SELECT UTC_TIME(), UTC_TIME() + 0;
    4. -> '18:07:53', 180753.000000
    5. mysql> SELECT UTC_TIMESTAMP(), UTC_TIMESTAMP() + 0;
    6. -> '2003-08-14 18:08:04', 20030814180804.000000

    3 日期时间格式设置函数

      格式说明参见附录

    3.1 DATE_FORMAT

    语法

    DATE_FORMAT(date,format)

    示例

    1. mysql> SELECT DATE_FORMAT('2009-10-04 22:23:00', '%W %M %Y');
    2. -> 'Sunday October 2009'
    3. mysql> SELECT DATE_FORMAT('2007-10-04 22:23:00', '%H:%i:%s');
    4. -> '22:23:00'
    5. mysql> SELECT DATE_FORMAT('1900-10-04 22:23:00',
    6. -> '%D %y %a %d %m %b %j');
    7. -> '4th 00 Thu 04 10 Oct 277'
    8. mysql> SELECT DATE_FORMAT('1997-10-04 22:23:00',
    9. -> '%H %k %I %r %T %S %w');
    10. -> '22 22 10 10:23:00 PM 22:23:00 00 6'
    11. mysql> SELECT DATE_FORMAT('1999-01-01', '%X %V');
    12. -> '1998 52'
    13. mysql> SELECT DATE_FORMAT('2006-06-00', '%d');
    14. -> '00'

    3.2 TIME_FORMAT

    语法

    TIME_FORMAT(time,format)

    示例

    1. SELECT TIME_FORMAT('100:00:00', '%H %k %h %I %l'); # 100 100 04 04 4
    2. SELECT TIME_FORMAT('23:00:00', '%H %k %h %I %l') # 23 23 11 11 11
    3. SELECT TIME_FORMAT('08:00:00', '%H %k %h %I %l') # 08 8 08 08 8

    3.3 STR_TO_DATE

    语法

    STR_TO_DATE(str,format)

    将日期时间字符串按指定格式表示

    示例

    1. mysql> SELECT STR_TO_DATE('01,5,2013','%d,%m,%Y');
    2. -> '2013-05-01'
    3. mysql> SELECT STR_TO_DATE('May 1, 2013','%M %d,%Y');
    4. -> '2013-05-01'
    5. # 字符串开头有干扰字符,则格式里面也要表明干扰字符,否则结果为NULL。结尾干扰字符不受影响
    6. mysql> SELECT STR_TO_DATE('a09:30:17','a%h:%i:%s');
    7. -> '09:30:17'
    8. mysql> SELECT STR_TO_DATE('a09:30:17','%h:%i:%s');
    9. -> NULL
    10. mysql> SELECT STR_TO_DATE('09:30:17a','%h:%i:%s');
    11. -> '09:30:17'
    12. mysql> SELECT STR_TO_DATE('abc','abc');
    13. -> '0000-00-00'
    14. mysql> SELECT STR_TO_DATE('9','%m');
    15. -> '0000-09-00'
    16. mysql> SELECT STR_TO_DATE('9','%s');
    17. -> '00:00:09'
    18. mysql> SELECT STR_TO_DATE('00/00/0000', '%m/%d/%Y');
    19. -> '0000-00-00'
    20. mysql> SELECT STR_TO_DATE('04/31/2004', '%m/%d/%Y');
    21. -> '2004-04-31'

    3.4 FROM_UNIXTIME

    语法

    FROM_UNIXTIME( unix_timestamp [, format ])
    函数功能
    将时间戳转换成指定格式的datetime格式
    示例
    1. mysql> SELECT FROM_UNIXTIME(1447430881);
    2. -> '2015-11-13 10:08:01'
    3. mysql> SELECT FROM_UNIXTIME(1447430881) + 0;
    4. -> 20151113100801
    5. mysql> SELECT FROM_UNIXTIME(1447430881,
    6. -> '%Y %D %M %h:%i:%s %x');
    7. -> '2015 13th November 10:08:01 2015'

    4 附录

    4.1 MYSQL日期时间格式表

    4.2 时间unit参数

    • MICROSECOND (microseconds)
    • SECOND
    • MINUTE
    • HOUR
    • DAY
    • WEEK
    • MONTH
    • QUARTER
    • YEAR.

    4.3 Temporal Interval 表达式

  • 相关阅读:
    PIE-engine 教程 ——sentinel-2影像数据去云分析(山西省为例)
    您的系统存在未授权的Bluetooth适配器,拔除或禁用该设备(蓝牙问题)
    Java 基础_框架阶段核心面试题
    90%的人都不懂的泛型,泛型的缺陷和应用场景
    Flutter手势--GestureDetector各种手势使用详情
    Python 基础合集4:Python的数据结构(str、list、tuple、dict、set)
    Java EE——常见锁策略和CAS及锁的其他概念
    JS递归函数详解
    Linux下NANDFLASH probe函数分析
    http2 wireshark未解码消息字段过滤
  • 原文地址:https://blog.csdn.net/dinghua_xuexi/article/details/126437083