MySQL提供了大量丰富的函数,在MySQL的使用中经常会用到各种函数,本文讲解的是常见的MySQL的日期与时间函数,主要用于处理日期和时间值。
获取当前日期和当前时间的函数
# CURDATE()或CURRENT_DATE():获取当前日期函数,返回值按“YYYY-MM-DD”或"YYYYMMDD"格式,格式根据函数在字符串或是数字语境而定# CURTIME()或CURRENT_TIME():获取当前时间,返回值按“HH:MM:SS”或"HHMMSS"格式,格式根据函数在字符串或是数字语境而定# 示例SELECT CURDATE(),CURDATE()+0,CURRENT_DATE(),CURTIME(),CURTIME()+0,CURRENT_TIME()
示例图解 获取当前日期+时间的函数
# CURRENT_TIMESTAMP()或LOCALTIME()或NOW()或SYSDATE():获取当前日期+时间的函数,返回值按“YYYY-MM-DD HH:MM:SS”或"YYYYMMDDHHMMSS"格式,格式根据函数在字符串或是数字语境而定# 示例SELECT CURRENT_TIMESTAMP(),LOCALTIME(),NOW(),SYSDATE(),CURRENT_TIMESTAMP()+0,LOCALTIME()+0,NOW()+0,SYSDATE()+0;
普通时间戳转UNIX时间戳,UNIX时间戳转普通时间戳函数
# UNIX_TIMESTAMP([d]):普通时间格式转UNIX时间戳,d为可选项,不填的时候返当前时间戳# FROM_UNIXTIME(str):UNIX时间戳转为普通时间格式。# 示例SELECT UNIX_TIMESTAMP(),UNIX_TIMESTAMP(NOW()),NOW(),FROM_UNIXTIME(UNIX_TIMESTAMP());
示例图解
返回UTC(世界标准时间)日期的函数,
# 返回UTC时间的函数,返回值按“YYYY-MM-DD”或"YYYYMMDD"格式,格式根据函数在字符串或是数字语境而定# UTC_DATE():返回UTC(世界标准时间)日期的函数# UTC_TIME():返回UTC(世界标准时间)时间的函数示例SELECT UTC_DATE(),UTC_TIME(),UTC_DATE()+0,UTC_TIME()+0;
示例图解 获取月份的函数
# MONTH(d):获取日期d的月份,阿拉伯值# MONTHNAME(d):获取日期d的月份,英文值# 示例SELECT MONTH(NOW()),MONTHNAME(NOW());
示例图解 获取星期的函数
# DAYNAME(d):获取日期d的英文名称# DAYOFWEEK(d):获取日期d在一周中的索引,1-周日,2-周一.....7-周六# WEEKDAY(d):也是获取日期d在一周中的索引,但是索引位置有所不同,0-周一,1-周二...6-周日# 示例SELECT DAYNAME(NOW()),DAYOFWEEK(NOW()),WEEKDAY(NOW());
示例图解 获取当前是一年中的第几个星期函数
WEEK(d,mode):计算某天位于一年中的第几个星期,范围是0-53或1-53WEEKOFYEAR(d,mode):计算某天位于一年中的第几个星期,范围是1-53,相当于WEEK(d,3);mode 的范围0 - 周日 - 0~53 - 本年度中有一个周日1 - 周一 - 0~53 - 本年度有3天以上2 - 周日 - 1~53 - 本年度中有一个周日3 - 周一 - 1~53 - 本年度有3天以上4 - 周日 - 0~53 - 本年度有3天以上5 - 周一 - 0~53 - 本年度有1个周一6 - 周日 - 1~53 - 本年度有3天以上7 - 周一 - 1~53 - 本年度有1个周一示例SELECT NOW(),WEEK(NOW()),WEEK(NOW(),0),WEEK(NOW(),1),WEEK(NOW(),3),WEEKOFYEAR(NOW());
示例图解
获取天数函数
# DOYORYEAR(d):获取日时间d是一年中的第几天,范围是1-366# DOYOFMONTH(d):获取日期时间d是当月中的第几天,范围是1-31# DAYOFWEEK(d):获取日期时间d是当周中的第几天,范围是1-7,周日为1,周六为7# 示例SELECT NOW(),DAYOFYEAR(NOW()),DAYOFMONTH(NOW()),DAYOFWEEK(NOW());
示例图解 计算日期的函数
DATE_ADD(d,INTERVAL expr type):日期加运算,type格式见下文ADDDATE(d,INTERVAL expr type):日期加运算,type格式见下文DATE_SUB(d,INTERVAL expr type):日期减运算,type格式见下文SUBDATE(d,INTERVAL expr type):日期减运算,type格式见下文ADDTIME(d,expr):时间加运算SUBTIME(d,expr):时间减运算DATEDIFF(d1,d2):两个日期间的间隔天数type的格式SECOND 秒 SECONDS MINUTE 分钟 MINUTES HOUR 时间 HOURS DAY 天 DAYS MONTH 月 MONTHS YEAR 年 YEARS MINUTE_SECOND 分钟和秒 "MINUTES:SECONDS" HOUR_MINUTE 小时和分钟 "HOURS:MINUTES" DAY_HOUR 天和小时 "DAYS HOURS" YEAR_MONTH 年和月 "YEARS-MONTHS" HOUR_SECOND 小时, 分钟, "HOURS:MINUTES:SECONDS" DAY_MINUTE 天, 小时, 分钟 "DAYS HOURS:MINUTES" DAY_SECOND 天, 小时, 分钟, 秒 "DAYS HOURS:MINUTES:SECONDS"示例1.SELECT NOW(),DATE_ADD(NOW(),INTERVAL 2 DAY),ADDDATE(NOW(),INTERVAL 300 SECOND);#当前时间添加两天,添加300秒
示例2.SELECT NOW(),DATE_SUB(NOW(),INTERVAL 1 MONTH),SUBDATE(NOW(),INTERVAL 300 MINUTE);#当前时间减少一个月,减少300分钟
示例3.SELECT NOW(),ADDTIME(NOW(),'1:1:1'),SUBTIME(NOW(),'2:2:2');#当前时间添加1小时1分1秒,当前时间减少2小时2分2秒
示例图解 示例4.SELECT NOW(),DATEDIFF(NOW(),DATE_ADD(NOW(),INTERVAL 1 YEAR));#计算当前时间与一年后当前时间的日期差
示例图解 日期格式化函数
日期格式化通配符说明%a : 工作日的缩写(Sun,Mon,...Sat)%b : 月份的缩写(Jun,Feb,...,Dec)%c : 数字形式的月份(1,...,12)%D : 带有英文后缀的该月日期(1st,2nd,3rd....)%d : 数字形式的日期,不足两位前方补零(01,02,...,31)%e : 数字形式的日期(1,...,31)%f : 微秒%H : 以24小时制表示当前是多少点,不足两位前方补零(01,02,...,24)%h,%I: 以12小时制表示当前是多少点,不足两位前方补零(01,02,...,12)%i : 数字形式的分钟(00,01,...,59)%j : 一年中的第几天(001,...,366)%k : 以24小时制表示当前是多少点(1,2,...,24)%l : 以12小时制表示当前是多少点(1,2,...,12)%M : 月份名称(Junuary,...,December)%m : 月份名称数字形式(01,...,12)%p : AM/PM%r : 时间(12小时制,如9:00:00 AM)%S,%s : 秒的数字形式(00,01,...,59)%T : 时间(24小时制,如9:00:00)%U : 第几周(00,53),周日为第一天%u : 第几周(00,53),周一为第一天%V : 第几周(01,53),周一为第一天,和%X一起使用%v : 第几周(01,53),周一为第一天,和%x一起使用%W : 工作日名称(周日,周一...)%w : 一周中的每日(0=周日...6=周六)%X : 该周的年份,周日为第一天,数字形式4位数,和%V一起用%x : 该周的年份,周一为第一天,数字形式4位数,和%v一起用%Y : 4位数字形式的年份%y : 2位数字形式的年份%% :%符号DATE_FORMAT():日期格式化函数示例SELECT DATE_FORMAT(NOW(),'%Y %m %d'),DATE_FORMAT(NOW(),'%X %V');
示例图解