> 文档中心 > 12MySQL单行函数(四)日期和时间函数

12MySQL单行函数(四)日期和时间函数

目录

获取日期时间 

拓展:把日期或者时间转换成数值

日期与时间戳的转换

获取月份、星期、星期数、天数等函数

日期的操作函数

EXTRACT(type FROM date)函数中type的取值与含义:

 时间和秒钟转换的函数

计算日期和时间的函数

第一组

        技巧:

                上述函数中type的取值:

第二组

日期的格式化与解析

        上述 非GET_FORMAT 函数中fmt参数常用的格式符:

格式化:

解析:格式化的逆过程

        GET_FORMAT函数中date_type和format_type参数取值如下:

使用格式化类型


获取日期、时间 

函数                   用法
CURDATE() ,CURRENT_DATE()    返回当前日期,只包含年、月、日
CURTIME() , CURRENT_TIME()   返回当前时间,只包含时、分、秒

NOW() / SYSDATE() / CURRENT_TIMESTAMP() /

LOCALTIME() /LOCALTIMESTAMP()

返回当前系统日期和时间
UTC_DATE()                   返回UTC(世界标准时间)日期
UTC_TIME()                   返回UTC(世界标准时间)时间

语句

#获取日期、时间SELECT CURDATE(),CURRENT_DATE(),CURTIME(),NOW(),SYSDATE(),UTC_DATE(),UTC_TIME()FROM DUAL;

结果

拓展:把日期或者时间转换成数值

# 把日期或者时间转换成数值SELECT CURDATE(),CURDATE() + 0,CURTIME() + 0,NOW() + 0FROM DUAL;

日期与时间戳的转换

函数                   用法
UNIX_TIMESTAMP()          以UNIX时间戳的形式返回当前时间。SELECT UNIX_TIMESTAMP() - >1634348884
UNIX_TIMESTAMP(date)      将时间date以UNIX时间戳的形式返回。
FROM_UNIXTIME(timestamp)  将UNIX时间戳的时间转换为普通格式的时间

语句

SELECT UNIX_TIMESTAMP(),UNIX_TIMESTAMP('2022-04-14 00:13:57'),FROM_UNIXTIME(1649866390)

结果

获取月份、星期、星期数、天数等函数

函数                   用法
YEAR(date) / MONTH(date) / DAY(date)     返回具体的日期值
HOUR(time) / MINUTE(time) /SECOND(time)  返回具体的时间值
MONTHNAME(date)                          返回月份:January,...
DAYNAME(date)                            返回星期几:MONDAY,TUESDAY.....SUNDAY
WEEKDAY(date)                            返回周几,注意,周1是0,周2是1,。。。周日是6
QUARTER(date)                            返回日期对应的季度,范围为1~4
WEEK(date) , WEEKOFYEAR(date)            返回一年中的第几周
DAYOFYEAR(date)                          返回日期是一年中的第几天
DAYOFMONTH(date)                         返回日期位于所在月份的第几天
DAYOFWEEK(date)                  

这一周的第几天

注意:周日是1,周一是2,。。。周六是7

语句

#获取月份、星期、星期数、天数等函数SELECT YEAR(CURDATE()) "年",MONTH(CURDATE()) "月",DAY(CURDATE()) "天",HOUR(CURTIME()) "小时",MINUTE(NOW()) "分钟",SECOND(SYSDATE()) "秒"FROM DUAL;

结果

语句2

SELECT MONTHNAME('2022-4-14') "月份",DAYNAME('2022-4-14') "星期几",WEEKDAY('2022-4-14') "周几",QUARTER(CURDATE()) "四季",WEEK(CURDATE()) "第几周",DAYOFYEAR(NOW()) "一年第几天",DAYOFMONTH(NOW()) "月份的第几天",DAYOFWEEK(NOW()) "这一周的第几天"FROM DUAL;

结果

日期的操作函数

函数                   用法
EXTRACT(type FROM date)  返回指定日期中特定的部分,type指定返回的值

EXTRACT(type FROM date)函数中type的取值与含义:

语句

SELECT EXTRACT(SECOND FROM NOW()) "秒数",EXTRACT(DAY FROM NOW()) "天数",EXTRACT(HOUR_MINUTE FROM NOW()) "小时",EXTRACT(QUARTER FROM '2022-05-12')"季度"FROM DUAL;

结果

 时间和秒钟转换的函数

函数                   用法
TIME_TO_SEC(time) 将 time 转化为秒并返回结果值。转化的公式为: 小时*3600+分钟*60+秒
SEC_TO_TIME(seconds)  将 seconds 描述转化为包含小时、分钟和秒的时间

语句

SELECT NOW(),TIME_TO_SEC(CURTIME()),SEC_TO_TIME(2494)FROM DUAL;

结果

计算日期和时间的函数

第一组

技巧:

        只要记住一组即可,整数 加 负数 减

函数                   用法

DATE_ADD(datetime, INTERVAL expr type),

ADDDATE(date,INTERVAL expr type) 

返回与给定日期时间相差INTERVAL时 间段的日期时间

DATE_SUB(date,INTERVAL expr type),

SUBDATE(date,INTERVAL expr type)      

返回与date相差INTERVAL时间间隔的 日期

上述函数中type的取值:

语句1

SELECT NOW(),DATE_ADD(NOW(),INTERVAL 1 YEAR), # 在 现在时间上加 一年DATE_ADD(NOW(),INTERVAL -1 YEAR),# 在 现在时间上减 一年DATE_SUB(NOW(),INTERVAL 1 YEAR)FROM DUAL;

结果

 语句2

SELECT DATE_ADD(NOW(), INTERVAL 1 DAY) "现在时间加上一天",DATE_ADD(NOW(),INTERVAL 1 SECOND) AS "现在时间加上一秒",ADDDATE(NOW(),INTERVAL 1 SECOND) "现在时间加上一秒,另一张写法",DATE_ADD(NOW(),INTERVAL '1_1' HOUR_MINUTE) AS "现在时间加上一小时和一分钟",DATE_ADD(NOW(), INTERVAL -1 YEAR)  "现在时间减去一年", #可以是负数DATE_ADD(NOW(), INTERVAL '1_1' YEAR_MONTH) "现在时间加上一年和一个月" #需要单引号  # 加一年 同时 一个月FROM DUAL;

结果

第二组

函数                   用法
ADDTIME(time1,time2)         返回time1加上time2的时间。当time2为一个数字时,代表的是 ,可以为负数
SUBTIME(time1,time2)         返回time1减去time2后的时间。当time2为一个数字时,代表的 是 ,可以为负数
DATEDIFF(date1,date2)        返回date1 - date2的日期间隔天数
TIMEDIFF(time1, time2)       返回time1 - time2的时间间隔
FROM_DAYS(N)                 返回从0000年1月1日起,N天以后的日期
TO_DAYS(date)                返回日期date距离0000年1月1日的天数
LAST_DAY(date)               返回date所在月份的最后一天的日期
MAKEDATE(year,n)             针对给定年份与所在年份中的天数返回一个日期
MAKETIME(hour,minute,second) 将给定的小时、分钟和秒组合成时间并返回
PERIOD_ADD(time,n)           返回time加上n后的时间

语句

SELECT ADDTIME(NOW(),20) "+20s",SUBTIME(NOW(),30) "-30s",SUBTIME(NOW(),'1:1:3') "-1小时1分钟3秒"FROM DUAL;SELECT # 差值  两个日期   DATEDIFF(NOW(),'2023-04-14') "返回现在时间 与 此时间的隔离天数", TIMEDIFF(NOW(),'2022-05-14 00:47:54') "返回现在时间 与 此时间的 时间间隔",FROM_DAYS(366) "返回从0000年1月1日起,366天以后的日期",TO_DAYS('0000-12-25') "返回日期date距离0000年1月1日的天数";SELECTLAST_DAY(NOW()) "所在月份的最后一天", MAKEDATE(YEAR(NOW()),32) "返回现在的年份 2022 在 加上 数值【32】 为 2022-02-01",MAKETIME(10,21,23) "给定的时分秒组合",PERIOD_ADD(20200101010101,10) # 在此时间上加 10 MySQL 5.7 不好使FROM DUAL;

结果

日期的格式化与解析

        格式化:日期 ---> 字符串
        解析:  字符串 ----> 日期

函数                   用法
DATE_FORMAT(date,fmt)               按照字符串fmt格式化日期date值
TIME_FORMAT(time,fmt)               按照字符串fmt格式化时间time值
GET_FORMAT(date_type,format_type)   返回日期字符串的显示格式
STR_TO_DATE(str, fmt)               按照字符串fmt对str进行解析,解析为一个日期

上述 非GET_FORMAT 函数中fmt参数常用的格式符:

格式化:

#格式化:SELECT DATE_FORMAT(CURDATE(),'%Y-%M-%D'),DATE_FORMAT(NOW(),'%Y-%m-%d'),TIME_FORMAT(CURTIME(),'%h:%i:%S'),DATE_FORMAT(NOW(),'%Y-%M-%D %h:%i:%S %W %w %T %r')FROM DUAL;

解析:格式化的逆过程

#解析:格式化的逆过程SELECT STR_TO_DATE('2022-April-14th 01:41:42 Thursday 4','%Y-%M-%D %h:%i:%S %W %w')FROM DUAL;

GET_FORMAT函数中date_type和format_type参数取值如下:

使用格式化类型

SELECT GET_FORMAT(DATE,'USA'),DATE_FORMAT(CURDATE(),GET_FORMAT(DATE,'USA'))FROM DUAL;

SELECT DATE_FORMAT(CURDATE(),'%m.%d.%Y'),DATE_FORMAT(CURDATE(),GET_FORMAT(DATE,'USA'));