一起养成写作习惯!这是我参与「掘金日新计划 · 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() |
|---|
| 15 | 27 |
示例二
SELECT EXTRACT(HOUR_MINUTE FROM NOW()), EXTRACT(QUARTER FROM NOW())
FROM DUAL
| EXTRACT(HOUR_MINUTE FROM NOW()) | EXTRACT(QUARTER FROM NOW() |
|---|
| 2045 | 2 |
时间和秒钟转换的函数
| 函数 | 用法 |
|---|
| 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) |
|---|
| 74845 | 20: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:30 | 2022-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:10 | 2022-04-27 20:59:10 | 2021-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:34 | 2022-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:06 | 2022-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) |
|---|
| 202206 | 20220406 | 2022040406 | 23247069710 |
PERIOD_ADD函数这里有点不明白,如果按照格式YYYYMM,表示加月份,这里结果是对的。但是如果YYYYMMDD的格式,表示的是加天。如果是YYYYMMDDHH的格式,又表示加的是小时。如果是YYYYMMDDHHMM的格式,是一串数字23247069710。难道这里是可以加月,天和小时三种格式,其他不支持?有懂得大神欢迎留言解惑,谢谢!
今天先学到这里,明天继续。