暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MySQL常用日期时间函数

原创 起鼓隆冬强 2023-12-05
85

Ⅰ. 获取当前:

根据函数是在字符串还是数字上下文中使用,将当前日期作为值或格式返回。

a. 获取当前日期+时间:now(fsp):

fsp为小数秒精度,fsp如果给定值,必须在0 ~ 6之间。值为0表示没有小数部分。如果省略,默认精度为0。

mysql> SELECT NOW(0) 'fsp=0'
        ->'2022-04-20 15:20:00'
mysql> SELECT NOW(3) 'fsp=3'
        ->'2022-04-20 15:20:00.764'
mysql> SELECT NOW() + 0
        ->20220420152421
复制

b. 获取当前日期:curdate()

mysql> SELECT CURDATE()
        ->'2022-04-20'
mysql> SELECT CURDATE() + 0
        ->20220420
复制

c. 获取当前日期:curtime() 用法同curdate

Ⅱ. 提取部分

a. 单个提取

year() / quarter() / month() / week(date[,mode]) [1]/ day() / hour() / minute() / second() /microsecond()

b. 部分截断

date() / time() / extract(unit from date)

mysql> SELECT EXTRACT(YEAR FROM '2022-04-20');
        -> 2022
mysql> SELECT EXTRACT(YEAR_MONTH FROM '2022-04-20');
        -> 202204
mysql> SELECT EXTRACT(DAY_MINUTE FROM '2022-04-20 01:02:03');
        -> 200102
mysql> SELECT EXTRACT(MICROSECOND FROM '2022-04-20 10:30:00.000123');
        -> 123
复制

Ⅲ. 计算函数

a. 增加时间间隔:date_add(date,interval,expr_unit)

b. 减少时间间隔:date_sub(date,interval,expr_uni)

mysql> SELECT DATE_ADD('2018-05-01',INTERVAL 1 DAY);
        -> '2018-05-02'
mysql> SELECT DATE_ADD('2020-12-31 23:59:59',INTERVAL 1 SECOND);
        -> '2021-01-01 00:00:00'
mysql> SELECT DATE_SUB('2025-01-01',INTERVAL '1 1:1:1' DAY_SECOND);
        -> '2024-12-30 22:58:59'
mysql> SELECT DATE_ADD('1900-01-01 00:00:00',INTERVAL '-1 10' DAY_HOUR);
        -> '1899-12-30 14:00:00'
mysql> SELECT DATE_SUB('1998-01-02', INTERVAL 31 DAY);
        -> '1997-12-02'
mysql> SELECT DATE_ADD('1992-12-31 23:59:59.000002',INTERVAL '1.999999' SECOND_MICROSECOND);
        -> '1993-01-01 00:00:01.000001'
复制

c. 计算日期差:datediff(date1,date2) 返回天数

d. 计算时间差:timediff(time1,time2) 返回time值

mysql> SELECT DATEDIFF('2010-11-30 23:59:59','2010-12-31');
        -> -31
mysql> SELECT TIMEDIFF('2008-12-31 23:59:59.000001', '2008-12-30 01:01:01.000002');
        -> '46:58:57.999999'
复制

Ⅳ. 转换函数

a. 日期与天

天数转日期:makedate(year,dayofyear)

日期转换为天:dayofyear(date)

mysql> SELECT MAKEDATE(2011,31), MAKEDATE(2011,32);
        -> '2011-01-31', '2011-02-01'
mysql> SELECT MAKEDATE(2011,365), MAKEDATE(2011,0);
        -> '2011-12-31', NULL
mysql> SELECT DAYOFYEAR('2007-02-03');
        -> 34
复制

b. 时间与秒

时间转换为秒:time_to_sec(time)

秒转换为时间:sec_to_time(seconds)

mysql> SELECT TIME_TO_SEC('22:23:00');
        -> 80580
mysql> SELECT TIME_TO_SEC('00:39:38');
        -> 2378
mysql> SELECT SEC_TO_TIME(2378);
        -> '00:39:38'
mysql> SELECT SEC_TO_TIME(2378) + 0;
        -> 3938
复制

c. 日期与字符

字符串转日期:str_to_date(str,format)[2]

转换从开头开始,str如果format发现不匹配则失败(返回null)。末尾的多余字符将str被忽略。

mysql> SELECT STR_TO_DATE('01,5,2013','%d,%m,%Y');
        -> '2013-05-01'
mysql> SELECT STR_TO_DATE('May 1, 2013','%M %d,%Y');
        -> '2013-05-01'
复制

日期转字符串:date_format(date,format)

时间转字符串:time_format(time,format)

mysql> SELECT DATE_FORMAT('2009-10-04 22:23:00', '%W %M %Y');
        -> 'Sunday October 2009'
mysql> SELECT DATE_FORMAT('2007-10-04 22:23:00', '%H:%i:%s');
        -> '22:23:00'
复制

Ⅴ. 时间戳

不常用timestamp()

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论