MySQL所有的日期时间函数处理
发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,下面讲讲关于MySQL所有的日期时间函数处理,文字的奥妙在于贴近主题相关。所以,闲话就不谈了,我们直接看下文吧,相信看完MySQL所有的日期时间函数处理这篇文章你一定会有所受益。-- MySQL日期时
千家信息网最后更新 2026年11月03日MySQL所有的日期时间函数处理
下面讲讲关于MySQL所有的日期时间函数处理,文字的奥妙在于贴近主题相关。所以,闲话就不谈了,我们直接看下文吧,相信看完MySQL所有的日期时间函数处理这篇文章你一定会有所受益。
-- MySQL日期时间处理函数-- 当前日期:2017-05-12(突然发现今天512,是不是会拉防空警报)SELECT NOW() FROM DUAL;-- 当前日期时间:2017-05-12 11:41:47-- 在MySQL里也存在和Oracle里类似的dual虚拟表:官方声明纯粹是为了满足select ... from...这一习惯问题,mysql会忽略对该表的引用。-- 那么MySQL中就不用DUAL了吧。SELECT NOW();-- 当前日期时间:2017-05-12 11:41:55-- 除了 now() 函数能获得当前的日期时间外,MySQL 中还有下面的函数:SELECT CURRENT_TIMESTAMP();-- 2017-05-15 10:19:31SELECT CURRENT_TIMESTAMP;-- 2017-05-15 10:19:51SELECT LOCALTIME();-- 2017-05-15 10:20:00SELECT LOCALTIME;-- 2017-05-15 10:20:10SELECT LOCALTIMESTAMP();-- 2017-05-15 10:20:21(v4.0.6)SELECT LOCALTIMESTAMP;-- 2017-05-15 10:20:30(v4.0.6)-- 这些日期时间函数,都等同于 now()。鉴于 now() 函数简短易记,建议总是使用 now()来替代上面列出的函数。SELECT SYSDATE();-- 当前日期时间:2017-05-12 11:42:03-- sysdate() 日期时间函数跟 now() 类似,-- 不同之处在于:now() 在执行开始时值就得到了;sysdate() 在函数执行时动态得到值。-- 看下面的例子就明白了:SELECT NOW(), SLEEP(3), NOW();SELECT SYSDATE(), SLEEP(3), SYSDATE();SELECT CURDATE();-- 当前日期:2017-05-12SELECT CURRENT_DATE();-- 当前日期:等同于 CURDATE()SELECT CURRENT_DATE;-- 当前日期:等同于 CURDATE()SELECT CURTIME();-- 当前时间:11:42:47SELECT CURRENT_TIME();-- 当前时间:等同于 CURTIME()SELECT CURRENT_TIME;-- 当前时间:等同于 CURTIME()-- 获得当前 UTC 日期时间函数SELECT UTC_TIMESTAMP(), UTC_DATE(), UTC_TIME()-- MySQL 获得当前时间戳函数:current_timestamp, current_timestamp()SELECT CURRENT_TIMESTAMP, CURRENT_TIMESTAMP();-- 2017-05-15 10:32:21 | 2017-05-15 10:32:21-- MySQL 日期时间 Extract(选取) 函数SET @dt = '2017-05-15 10:37:14.123456';SELECT DATE(@dt);-- 获取日期:2017-05-15SELECT TIME('2017-05-15 10:37:14.123456');-- 获取时间:10:37:14.123456SELECT YEAR('2017-05-15 10:37:14.123456');-- 获取年份SELECT MONTH('2017-05-15 10:37:14.123456');-- 获取月份SELECT DAY('2017-05-15 10:37:14.123456');-- 获取日SELECT HOUR('2017-05-15 10:37:14.123456');-- 获取时SELECT MINUTE('2017-05-15 10:37:14.123456');-- 获取分SELECT SECOND('2017-05-15 10:37:14.123456');-- 获取秒SELECT MICROSECOND('2017-05-15 10:37:14.123456');-- 获取毫秒SELECT QUARTER('2017-05-15 10:37:14.123456');-- 获取季度SELECT WEEK('2017-05-15 10:37:14.123456');-- 20 (获取周)SELECT WEEK('2017-05-15 10:37:14.123456', 7);-- ****** 测试此函数在MySQL5.6下无效SELECT WEEKOFYEAR('2017-05-15 10:37:14.123456');-- 同week()SELECT DAYOFYEAR('2017-05-15 10:37:14.123456');-- 135 (日期在年度中第几天)SELECT DAYOFMONTH('2017-05-15 10:37:14.123456');-- 5 (日期在月度中第几天)SELECT DAYOFWEEK('2017-05-15 10:37:14.123456');-- 2 (日期在周中第几天;周日为第一天)SELECT WEEKDAY('2017-05-15 10:37:14.123456');-- 0SELECT WEEKDAY('2017-05-21 10:37:14.123456');-- 6(与dayofweek()都表示日期在周的第几天,只是参考标准不同,weekday()周一为第0天,周日为第6天)SELECT YEARWEEK('2017-05-15 10:37:14.123456');-- 201720(年和周)SELECT EXTRACT(YEAR FROM '2017-05-15 10:37:14.123456');SELECT EXTRACT(MONTH FROM '2017-05-15 10:37:14.123456');SELECT EXTRACT(DAY FROM '2017-05-15 10:37:14.123456');SELECT EXTRACT(HOUR FROM '2017-05-15 10:37:14.123456');SELECT EXTRACT(MINUTE FROM '2017-05-15 10:37:14.123456');SELECT EXTRACT(SECOND FROM '2017-05-15 10:37:14.123456');SELECT EXTRACT(MICROSECOND FROM '2017-05-15 10:37:14.123456');SELECT EXTRACT(QUARTER FROM '2017-05-15 10:37:14.123456');SELECT EXTRACT(WEEK FROM '2017-05-15 10:37:14.123456');SELECT EXTRACT(YEAR_MONTH FROM '2017-05-15 10:37:14.123456');SELECT EXTRACT(DAY_HOUR FROM '2017-05-15 10:37:14.123456');SELECT EXTRACT(DAY_MINUTE FROM '2017-05-15 10:37:14.123456');-- 151037(日时分)SELECT EXTRACT(DAY_SECOND FROM '2017-05-15 10:37:14.123456');-- 15103714(日时分秒)SELECT EXTRACT(DAY_MICROSECOND FROM '2017-05-15 10:37:14.123456');-- 15103714123456(日时分秒毫秒)SELECT EXTRACT(HOUR_MINUTE FROM '2017-05-15 10:37:14.123456');-- 1037(时分)SELECT EXTRACT(HOUR_SECOND FROM '2017-05-15 10:37:14.123456');-- 103714(时分秒)SELECT EXTRACT(HOUR_MICROSECOND FROM '2017-05-15 10:37:14.123456');-- 103714123456(日时分秒毫秒)SELECT EXTRACT(MINUTE_SECOND FROM '2017-05-15 10:37:14.123456');-- 3714(分秒)SELECT EXTRACT(MINUTE_MICROSECOND FROM '2017-05-15 10:37:14.123456');-- 3714123456(分秒毫秒)SELECT EXTRACT(SECOND_MICROSECOND FROM '2017-05-15 10:37:14.123456');-- 14123456(秒毫秒)-- MySQL Extract() 函数除了没有date(),time() 的功能外,其他功能一应具全。-- 并且还具有选取'day_microsecond' 等功能。-- 注意这里不是只选取 day 和 microsecond,而是从日期的 day 部分一直选取到 microsecond 部分。SELECT DAYNAME('2017-05-15 10:37:14.123456');-- Monday(返回英文星期)SELECT MONTHNAME('2017-05-15 10:37:14.123456');-- May(返回英文月份)SELECT LAST_DAY('2016-02-01');-- 2016-02-29 (返回月份中最后一天)SELECT LAST_DAY('2016-05-01');-- 2016-05-31-- DATE_ADD(date,INTERVAL expr type) 从日期加上指定的时间间隔-- type参数可参考:http://www.w3school.com.cn/sql/func_date_sub.aspSELECT DATE_ADD('2017-05-15 10:37:14.123456',INTERVAL 1 YEAR);-- 表示:2018-05-15 10:37:14.123456SELECT DATE_ADD('2017-05-15 10:37:14.123456',INTERVAL 1 QUARTER);-- 表示:2017-08-15 10:37:14.123456SELECT DATE_ADD('2017-05-15 10:37:14.123456',INTERVAL 1 MONTH);-- 表示:2017-06-15 10:37:14.123456SELECT DATE_ADD('2017-05-15 10:37:14.123456',INTERVAL 1 WEEK);-- 表示:2017-05-22 10:37:14.123456SELECT DATE_ADD('2017-05-15 10:37:14.123456',INTERVAL 1 DAY);-- 表示:2017-05-16 10:37:14.123456SELECT DATE_ADD('2017-05-15 10:37:14.123456',INTERVAL 1 HOUR);-- 表示:2017-05-15 11:37:14.123456SELECT DATE_ADD('2017-05-15 10:37:14.123456',INTERVAL 1 MINUTE);-- 表示:2017-05-15 10:38:14.123456SELECT DATE_ADD('2017-05-15 10:37:14.123456',INTERVAL 1 SECOND);-- 表示:2017-05-15 10:37:15.123456SELECT DATE_ADD('2017-05-15 10:37:14.123456',INTERVAL 1 MICROSECOND);-- 表示:2017-05-15 10:37:14.123457-- DATE_SUB(date,INTERVAL expr type) 从日期减去指定的时间间隔SELECT DATE_SUB('2017-05-15 10:37:14.123456',INTERVAL 1 YEAR);-- 表示:2016-05-15 10:37:14.123456SELECT DATE_SUB('2017-05-15 10:37:14.123456',INTERVAL 1 QUARTER);-- 表示:2017-02-15 10:37:14.123456SELECT DATE_SUB('2017-05-15 10:37:14.123456',INTERVAL 1 MONTH);-- 表示:2017-04-15 10:37:14.123456SELECT DATE_SUB('2017-05-15 10:37:14.123456',INTERVAL 1 WEEK);-- 表示:2017-05-08 10:37:14.123456SELECT DATE_SUB('2017-05-15 10:37:14.123456',INTERVAL 1 DAY);-- 表示:2017-05-14 10:37:14.123456SELECT DATE_SUB('2017-05-15 10:37:14.123456',INTERVAL 1 HOUR);-- 表示:2017-05-15 09:37:14.123456SELECT DATE_SUB('2017-05-15 10:37:14.123456',INTERVAL 1 MINUTE);-- 表示:2017-05-15 10:36:14.123456SELECT DATE_SUB('2017-05-15 10:37:14.123456',INTERVAL 1 SECOND);-- 表示:2017-05-15 10:37:13.123456SELECT DATE_SUB('2017-05-15 10:37:14.123456',INTERVAL 1 MICROSECOND);-- 表示:2017-05-15 10:37:14.123455-- 经特殊日期测试,DATE_SUB(date,INTERVAL expr type)可放心使用SELECT DATE_SUB(CURDATE(),INTERVAL 1 DAY);-- 前一天:2017-05-11SELECT DATE_SUB(CURDATE(),INTERVAL -1 DAY);-- 后一天:2017-05-13SELECT DATE_SUB(CURDATE(),INTERVAL 1 MONTH);-- 一个月前日期:2017-04-12SELECT DATE_SUB(CURDATE(),INTERVAL -1 MONTH);-- 一个月后日期:2017-06-12SELECT DATE_SUB(CURDATE(),INTERVAL 1 YEAR);-- 一年前日期:2016-05-12SELECT DATE_SUB(CURDATE(),INTERVAL -1 YEAR);-- 一年后日期:20178-06-12-- MySQL date_sub() 日期时间函数 和 date_add() 用法一致,并且可以用INTERNAL -1 xxx的形式互换使用;-- 另外,MySQL 中还有两个函数 subdate(), subtime(),建议,用 date_sub() 来替代。-- MySQL 另类日期函数:period_add(P,N), period_diff(P1,P2)-- 函数参数"P" 的格式为"YYYYMM" 或者 "YYMM",第二个参数"N" 表示增加或减去 N month(月)。-- MySQL period_add(P,N):日期加/减去N月。SELECT PERIOD_ADD(201705,2), PERIOD_ADD(201705,-2);-- 201707 20170503-- period_diff(P1,P2):日期 P1-P2,返回 N 个月。SELECT PERIOD_DIFF(201706, 201703);-- -- datediff(date1,date2):两个日期相减 date1 - date2,返回天数SELECT DATEDIFF('2017-06-05','2017-05-29');-- 7-- TIMEDIFF(time1,time2):两个日期相减 time1 - time2,返回 TIME 差值SELECT TIMEDIFF('2017-06-05 19:28:37', '2017-06-05 17:00:00');-- 02:28:37-- MySQL日期转换函数SELECT TIME_TO_SEC('01:00:05'); -- 3605SELECT SEC_TO_TIME(3605);-- 01:00:05-- MySQL (日期、天数)转换函数:to_days(date), from_days(days)SELECT TO_DAYS('0000-00-00'); -- NULL SELECT TO_DAYS('2017-06-05'); -- 736850SELECT FROM_DAYS(0); -- '0000-00-00' SELECT FROM_DAYS(736850); -- '2017-06-05'-- MySQL Str to Date (字符串转换为日期)函数:str_to_date(str, format)SELECT STR_TO_DATE('06.05.2017 19:40:30', '%m.%d.%Y %H:%i:%s');-- 2017-06-05 19:40:30SELECT STR_TO_DATE('06/05/2017', '%m/%d/%Y'); -- 2017-06-05SELECT STR_TO_DATE('2017/12/3','%Y/%m/%d') -- 2017-12-03SELECT STR_TO_DATE('20:09:30', '%h:%i:%s') -- NULL(超过12时的小时用小写h,得到的结果为NULL)-- 日期时间格式化SELECT DATE_FORMAT('2017-05-12 17:03:51', '%Y年%m月%d日 %H时%i分%s秒');-- 2017年05月12日 17时03分51秒(具体需要什么格式的数据根据实际情况来;小写h为12小时制;)SELECT TIME_FORMAT('2017-05-12 17:03:51', '%Y年%m月%d日 %H时%i分%s秒');-- 0000年00月00日 17时03分51秒(time_format()只能用于时间的格式化)-- STR_TO_DATE()和DATE_FORMATE()为互逆操作-- MySQL 获得国家地区时间格式函数:get_format()-- MySQL get_format() 语法:get_format(date|time|datetime, 'eur'|'usa'|'jis'|'iso'|'internal'-- MySQL get_format() 用法的全部示例:SELECT GET_FORMAT(DATE,'usa'); -- '%m.%d.%Y' SELECT GET_FORMAT(DATE,'jis'); -- '%Y-%m-%d' SELECT GET_FORMAT(DATE,'iso'); -- '%Y-%m-%d' SELECT GET_FORMAT(DATE,'eur'); -- '%d.%m.%Y' SELECT GET_FORMAT(DATE,'internal'); -- '%Y%m%d' SELECT GET_FORMAT(DATETIME,'usa'); -- '%Y-%m-%d %H.%i.%s' SELECT GET_FORMAT(DATETIME,'jis'); -- '%Y-%m-%d %H:%i:%s' SELECT GET_FORMAT(DATETIME,'iso'); -- '%Y-%m-%d %H:%i:%s' SELECT GET_FORMAT(DATETIME,'eur'); -- '%Y-%m-%d %H.%i.%s' SELECT GET_FORMAT(DATETIME,'internal'); -- '%Y%m%d%H%i%s' SELECT GET_FORMAT(TIME,'usa'); -- '%h:%i:%s %p' SELECT GET_FORMAT(TIME,'jis'); -- '%H:%i:%s' SELECT GET_FORMAT(TIME,'iso'); -- '%H:%i:%s' SELECT GET_FORMAT(TIME,'eur'); -- '%H.%i.%s' SELECT GET_FORMAT(TIME,'internal'); -- '%H%i%s'-- MySQL 拼凑日期、时间函数:makdedate(year,dayofyear), maketime(hour,minute,second)SELECT MAKEDATE(2017,31); -- '2017-01-31' SELECT MAKEDATE(2017,32); -- '2017-02-01'SELECT MAKETIME(19,52,35); -- '19:52:35'-- MySQL 时区(timezone)转换函数:convert_tz(dt,from_tz,to_tz)SELECT CONVERT_TZ('2017-06-05 19:54:12', '+08:00', '+00:00'); -- 2017-06-05 11:54:12-- MySQL (Unix 时间戳、日期)转换函数-- unix_timestamp(), unix_timestamp(date), from_unixtime(unix_timestamp), from_unixtime(unix_timestamp,format)-- 将具体时间时间转为timestampSELECT UNIX_TIMESTAMP();-- 当前时间的时间戳:1494815779SELECT UNIX_TIMESTAMP('2017-05-15');-- 指定日期的时间戳:1494777600SELECT UNIX_TIMESTAMP('2017-05-15 10:37:14');-- 指定日期时间的时间戳:1494815834-- 将时间戳转为具体时间SELECT FROM_UNIXTIME(1494815834);-- 2017-05-15 10:37:14SELECT FROM_UNIXTIME(1494815834, '%Y年%m月%d日 %h时%分:%s秒');-- 获取时间戳对应的格式化日期时间-- MySQL 时间戳(timestamp)转换、增、减函数SELECT TIMESTAMP('2017-05-15');-- 2017-05-15 00:00:00SELECT TIMESTAMP('2017-05-15 08:12:25', '01:01:01');-- 2017-05-15 09:13:26SELECT DATE_ADD('2017-05-15 08:12:25', INTERVAL 1 DAY);-- 2017-05-16 08:12:25SELECT TIMESTAMPADD(DAY, 1, '2017-05-15 08:12:25');-- 2017-05-16 08:12:25; MySQL timestampadd() 函数类似于 date_add()。SELECT TIMESTAMPDIFF(YEAR, '2017-06-01', '2016-05-15');-- -1SELECT TIMESTAMPDIFF(MONTH, '2017-06-01', '2016-06-15');-- -11SELECT TIMESTAMPDIFF(DAY, '2017-06-01', '2016-06-15');-- -351SELECT TIMESTAMPDIFF(HOUR, '2017-06-01 08:12:25', '2016-06-15 00:00:00');-- -8432SELECT TIMESTAMPDIFF(MINUTE, '2017-06-01 08:12:25', '2016-06-15 00:00:00');-- -505932SELECT TIMESTAMPDIFF(SECOND, '2017-06-01 08:12:25', '2016-06-15 00:00:00');-- -30355945对于以上MySQL所有的日期时间函数处理相关内容,大家还有什么不明白的地方吗?或者想要了解更多相关,可以继续关注我们的行业资讯板块。
日期
时间
函数
时分
格式
处理
两个
功能
参数
月份
不同
分秒
天数
小写
小时
建议
部分
面的
英文
参考
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
互联网属科技
金融科技还是互联网
互联网科技有限公司图片
互联网科技战争
科技制造互联网公司
上海挚品互联网科技
互联网科技股票
奇酷互联网络科技公司
润盈互联网科技
齐家互联网科技有限公司
科技伦理 互联网公司
博兴的互联网电子科技公司
港股科技和互联网
宜昌元轩互联网科技有限公司
杭州壁岐互联网科技有限公司
消费医药和互联网科技
国大互联网教育科技有限公司薪资
云南省自由互联网科技有限公司
广州百诚互联网科技有限公司官网
互联网科技年终奖
关于新基建和互联网科技
互联网科技金融公司
狮子座互联网科技
鑫亿盛互联网科技
常德市电业局互联网科技部
全球顶尖互联网科技公司
互联网科技和信息
科技类公司包括互联网吗
威龙国际互联网科技公司
互联网科技快速发展优美句子