MySQL学习-函数(七)

128 阅读4分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第27天,点击查看活动详情

前言

上篇我们又学习了一部分MySQL中的函数。有兴趣的小伙伴可以阅读(# MySQL学习-函数(六))。
下面继续学习MySQL中的函数。

日期和时间函数

日期的操作函数

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

函数中type取值以及含义:

type取值含义
MICROSECOND返回毫秒数
SECOND返回秒数
MINUTE返回分钟数
HOUR返回小时数
DAY返回天数
WEEK返回日期在一年中的第几个星期
MONTH返回日期在一年中的第几个月
QUARTER返回日期在一年中的第几个季度
YEAR返回日期的年份
SECOND_MICROSECOND返回秒和毫秒值
MINUTE_MICROSECOND返回分钟和毫秒值
MINUTE_SECOND返回分钟和秒值
HOUR_MICROSECOND返回小时和毫秒值
HOUR_SECOND返回小时和秒值
HOUR_MINUTE返回小时和分钟值
DAY_MICROSECOND返回天和毫秒值
DAY_SECOND返回天和秒值
DAY_MINUTE返回天和分钟值
DAY_HOUR返回天和小时
YEAR_MONTH返回年和月

示例一

SELECT EXTRACT(SECOND FROM NOW()), EXTRACT(DAY FROM NOW())
FROM DUAL
EXTRACT(SECOND FROM NOW())EXTRACT(DAY FROM NOW()
1527

示例二

SELECT EXTRACT(HOUR_MINUTE FROM NOW()), EXTRACT(QUARTER FROM NOW())
FROM DUAL
EXTRACT(HOUR_MINUTE FROM NOW())EXTRACT(QUARTER FROM NOW()
20452

时间和秒钟转换的函数

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

示例三

SELECT TIME_TO_SEC(CURTIME()), SEC_TO_TIME(74845)
FROM DUAL
TIME_TO_SEC(CURTIME())SEC_TO_TIME(74845)
7484520:47:25

TIME_TO_SEC与SEC_TO_TIME互逆的函数。

计算日期和时间的函数

函数用法
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值及含义:

type取值含义
HOUR小时
MINUTE分钟
SECOND
YEAR
MONTH
DAY
YEAR_MONTH年和月
DAY_HOUR日和小时
DAY_MINUTE日和分钟
DAY_SECOND日和秒
HOUR_MINUTE小时和分钟
HOUR_SECOND小时和秒
MINUTE_SECOND分钟和秒

示例四

SELECT DATE_ADD(NOW(), INTERVAL 1 YEAR), NOW()
FROM DUAL
DATE_ADD(NOW(), INTERVAL 1 YEAR)NOW()
2023-04-27 20:52:302022-04-27 20:52:30

INTERVAL 1 YEAR在当前时间的基础上加一年。

示例五

SELECT DATE_ADD(NOW(), INTERVAL -1 YEAR), NOW(),DATE_SUB(NOW(), INTERVAL 1 YEAR)
FROM DUAL
DATE_ADD(NOW(), INTERVAL -1 YEAR)NOW()DATE_SUB(NOW(), INTERVAL 1 YEAR)
2021-04-27 20:59:102022-04-27 20:59:102021-04-27 20:59:10

INTERVAL -1 YEAR在当前时间的基础上加负一年,相当于减一年。结果与DATE_SUB相同。

示例六

SELECT DATE_ADD(NOW(), INTERVAL '1_1' YEAR_MONTH), NOW()
FROM DUAL
DATE_ADD(NOW(), INTERVAL '1_1' YEAR_MONTH)NOW()
2023-05-27 21:03:342022-04-27 21:03:34

使用YEAR_MONTH类似type时,值需要单引号并且用下划线分隔。这里'1_1'分别表示,年和月各加1。结果就是2023年5月了。

函数用法
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), NOW()
FROM DUAL
ADDTIME(NOW(), 20)NOW()
2022-04-27 21:08:062022-04-27 21:07:46

当前时间加20s。

示例八

SELECT PERIOD_ADD(202204, 2), PERIOD_ADD(20220404, 2), PERIOD_ADD(2022040404, 2), PERIOD_ADD(202204040404, 2)
FROM DUAL
PERIOD_ADD(202204, 2)PERIOD_ADD(20220404, 2)PERIOD_ADD(2022040404, 2)PERIOD_ADD(202204040404, 2)
20220620220406202204040623247069710

PERIOD_ADD函数这里有点不明白,如果按照格式YYYYMM,表示加月份,这里结果是对的。但是如果YYYYMMDD的格式,表示的是加天。如果是YYYYMMDDHH的格式,又表示加的是小时。如果是YYYYMMDDHHMM的格式,是一串数字23247069710。难道这里是可以加月,天和小时三种格式,其他不支持?有懂得大神欢迎留言解惑,谢谢!

今天先学到这里,明天继续。