mysql-常用时间日期函数 | |||||||||||||||||||||||||||||||||||||||
函数 | 释义 | 使用案例 | 结果 | ||||||||||||||||||||||||||||||||||||
CURDATE() CURRENT_DATE() | 将当前日期按照"YYYY-MM-DD"或者"YYYYMMDD"格式的值返回,具体格式根据函数用在字符串或是数字语境中而定 | SELECT CURDATE(), CURRENT_DATE() FROM DUAL; | 2021-11-22 2021-11-22 | ||||||||||||||||||||||||||||||||||||
CURRENT_TIMESTAMP() LOCALTIME() NOW() SYSDATE() | 这四个函数作用相同,返回当前日期和时间值,格式为"YYYY_MM-DD HH:MM:SS"或"YYYYMMDDHHMMSS",具体格式根据函数用在字符串或数字语境中而定 | select CURRENT_TIMESTAMP(), LOCALTIME(), NOW(), SYSDATE() from DUAL; | 2021-11-22 21:05:17 2021-11-22 21:05:17 2021-11-22 21:05:17 2021-11-22 21:05:17 | ||||||||||||||||||||||||||||||||||||
UNIX_TIMESTAMP() UNIX_TIMESTAMP(date) | 前者返回一个格林尼治标准时间1970-01-01 00:00:00到现在的秒数,后者返回一个格林尼治标准时间1970-01-01 00:00:00到指定时间的秒数 | select UNIX_TIMESTAMP(), UNIX_TIMESTAMP(NOW()-1) from DUAL; | 1637587448 1637587447 | ||||||||||||||||||||||||||||||||||||
FROM_UNIXTIME(date) | 和UNIX_TIMESTAMP互为反函数,把UNIX时间戳转换为普通格式的时间 | select FROM_UNIXTIME(1637581619) from DUAL; | 2021-11-22 19:46:59 | ||||||||||||||||||||||||||||||||||||
UTC_DATE() UTC_TIME() | 前者返回当前UTC(世界标准时间)日期值,其格式为"YYYY-MM-DD"或"YYYYMMDD"; 后者返回当前UTC时间值,其格式为"HH-MM-SS"或"HHMMSS"。具体使用哪种取决于函数用在字符串还是数字语境中 | select UTC_DATE(), UTC_TIME() from DUAL; | 2021-11-22 13:28:48 | ||||||||||||||||||||||||||||||||||||
MONTH(date) MONTHNAME(date) | 前者返回指定日期中的月份,后者返回指定日期中的月份的名称 | select MONTH(now()), MONTHNAME(now()) from DUAL; | 11 November | ||||||||||||||||||||||||||||||||||||
DAYNAME(d) DAYOFWEEK(d) WEEKDAY(d) | DAYNAME(d)返回d对应的工作日的英文名称,如Sunday、Monday等;DAYOFWEEK(d)返回的对应一周中的索引,1表示周日、2表示周一;WEEKDAY(d)表示d对应的工作日索引,0表示周一,1表示周二 | select DAYNAME(NOW()), DAYOFWEEK(NOW()), WEEKDAY(NOW()) from DUAL; | Monday 2 0 | ||||||||||||||||||||||||||||||||||||
WEEK(d) WEEKOFYEAD(d) | 前者计算日期d是一年中的第几周,后者计算某一天位于一年中的第几周 | select WEEK(NOW()), WEEKOFYEAR(NOW()) from DUAL; | 47 47 | ||||||||||||||||||||||||||||||||||||
DAYOFYEAR(d) DAYOFMONTH(d) | 前者返回d是一年中的第几天,后者返回d是一月中的第几天 | SELECT DAYOFYEAR(NOW()), DAYOFMONTH(NOW()) FROM DUAL; | 326 22 | ||||||||||||||||||||||||||||||||||||
YEAR(date) MONTH(date) DAY(date) QUARTER(date) MINUTE(time) SECOND(time) | YEAR(date)返回指定日期对应的年份,范围是1970~2069;MONTH(date)返回月份,DAY(date)返回具体哪一天,QUARTER(date)返回date对应一年中的季度,范围是1~4;MINUTE(time)返回time对应的分钟数,范围是0~59;SECOND(time)返回制定时间的秒值 | SELECT YEAR(NOW()), MONTH(NOW()),DAY(NOW()),QUARTER(NOW()), MINUTE(NOW()), SECOND(NOW()) FROM DUAL; | 2022 2 10 1 9 56 | ||||||||||||||||||||||||||||||||||||
EXTRACE(type FROM date) | 从日期中提取一部分,type可以是YEAR、YEAR_MONTH、DAY_HOUR、DAY_MICROSECOND、DAY_MINUTE、DAY_SECOND | SELECT EXTRACT(YEAR FROM NOW()) FROM DUAL; | 2021 | ||||||||||||||||||||||||||||||||||||
TIME_TO_SEC(time) | 返回以转换为秒的time参数,转换公式为"3600*小时 + 60*分钟 + 秒" | SELECT TIME_TO_SEC(NOW()) FROM DUAL; | 78382 | ||||||||||||||||||||||||||||||||||||
SEC_TO_TIME() | 和TIME_TO_SEC(time)互为反函数,将秒值转换为时间格式 | SELECT SEC_TO_TIME(73922) FROM DUAL; | 20:32:02 | ||||||||||||||||||||||||||||||||||||
DATE_ADD(date,INTERVAL expr type) ADDDATE(date,INTERVAL expr type) | 返回将起始时间加上expr type之后的时间,比如DATE_ADD('2010-12-31 23:59:59', INTERVAL 1 SECOND)表示的就是把第一个时间加1秒 | SELECT DATE_ADD(NOW(),INTERVAL 1 SECOND), ADDDATE(NOW(),INTERVAL 1 SECOND) FROM DUAL; | 2021-11-22 21:49:50 2022-11-22 21:49:49 | ||||||||||||||||||||||||||||||||||||
DATE_SUB(date,INTERVAL expr type) SUBDATE(date,INTERVAL expr type) | 回将起始时间减去expr type之后的时间 | SELECT DATE_SUB(NOW(),INTERVAL 1 DAY), SUBDATE(NOW(),INTERVAL 1 YEAR); | 2021-11-21 21:51:44br> 2020-11-22 21:51:44 | ||||||||||||||||||||||||||||||||||||
ADDTIME(date,expr) SUBTIME(date,expr) | 前者进行date的时间加操作; 后者进行date的时间减操作,expr 是一个时间表达式 | SELECT ADDTIME(NOW(), '1:1:1'), SUBTIME(NOW(), '5:10:37') FROM DUAL; | 2021-11-22 22:57:19 2021-11-22 16:45:41 | ||||||||||||||||||||||||||||||||||||
timestampdiff(type,date1, date2); DATEDIFF(date1, date2) | 前者有参数设置,可以精确到天(DAY)、小时(HOUR),分钟(MINUTE)和秒(SECOND),使用起来比datediff函数更加灵活。对于比较的两个时间,时间小的放在前面,时间大的放在后面; 后者返回值是相差的天数,不能定位到小时、分钟和秒,时间大的放前面 | select timestampdiff(DAY,'2021-12-08 21:40:05', '2021-12-09 21:40:05') a, DATEDIFF('2021-12-08 21:40:05', '2021-12-09 21:40:05') b;; | 1 -1 |
08-28
325