1. 获取工夫
函数 | 性能 | 返回格局 |
---|---|---|
CURDATE(), CURRENT_DATE() | 返回以后日期,只蕴含年、月、日 | 2022-03-08 |
CURTIME(), CURRENT_TIME() | 返回以后工夫,只蕴含时、分、秒 | 19:35:46 |
NOW(), SYSDATE(), CURRENT_TIMESTAMP(), LOCALTIME(), LOCALTIMESTAMP() | 返回以后零碎日期和工夫 | 2022-03-08 19:37:07 |
UTC_DATE() | 返回 UTC(世界规范工夫)日期 | 2022-03-08 |
UTC_TIME() | 返回 UTC(世界规范工夫)工夫 | 11:38:52 |
2. 日期与工夫戳的转换
函数 | 性能 | 返回格局 |
---|---|---|
UNIX_TIMESTAMP(), UNIX_TIMESTAMP(NOW()) | 以 UNIX 工夫戳的模式返回以后工夫 | 1646739875 |
FROM_UNIXTIME(1646739875) | 将 UNIX 工夫戳转换为一般工夫格局 | 2022-03-08 19:44:35 |
3. 获取月份、星期、星期数、天数等函数
函数 | 性能 | 返回格局 |
---|---|---|
YEAR(NOW()),/MONTH(NOW()),/DAY(NOW()) | 返回年 / 月 / 日 | 2022/3/8 |
HOUR(NOW()), /MONTH(NOW()), /DAY(NOW()) | 返回时 / 分 / 秒 | 19/3/8 |
MONTHNAME(NOW()) | 返回英文月份 | March |
DAYNAME(NOW()) | 返回星期几 | Tuesday |
WEEKDAY(NOW()) | 返回周几(从 0 开始) | 1(星期二) |
QUARTER(NOW()) | 返回日期对应的季度,范畴 1 -4 | 1 |
WEEK(NOW()), WEEKOFYEAR(NOW()) | 返回一年中的第几周 | 10 |
DAYOFYEAR(NOW()) | 返回一年中的第几天 | 67 |
DAYOFMONTH(NOW()) | 返回所在月份中的第几天 | 8 |
DAYOFWEEK(NOW()) | 返回周几(周日为 1) | 3(星期二) |
4. 日期的操作函数
-- 返回指定日期中的特定局部,type 指定返回的值;SELECT EXTRACT(TYPE FROM NOW()) FROM DUAL;
TYPE 的含意与取值:
type 取值 | 含意 | 返回值 |
---|---|---|
MICROSECOND | 返回毫秒数 | |
SECOND | 返回秒数 | 12 |
MINUTE | 返回分钟数 | 25 |
HOUR | 返回小时数 | 20(24 小时制) |
DAY | 返回天数 | 8 |
WEEK | 返回日期在一年中的第几个星期 | 10 |
MONTH | 返回日期在一年中的第几个月 | 3 |
QUARTER | 返回日期在一年中和第几个季度 | 1 |
YEAR | 返回日期的年份 | 2022 |
SECOND_MICROSECOND | 返回秒和毫秒值 | 34000000 |
MINUTE_MICROSECOND | 返回分钟和毫秒值 | 3716000000 |
MINUTE_SECOND | 返回分钟和秒值 | 3851(2022-03-08 20:38:51) |
HOUR_MICROSECOND | 返回小时和毫秒值 | 203944000000(2022-03-08 20:39:44) |
HOUR_SECOND | 返回小时和秒值 | 204025(2022-03-08 20:40:25) |
HOUR_MINUTE | 返回小时和分钟值 | 2040(2022-03-08 20:40:52) |
DAY_MICROSECOND | 返回天和毫秒值 | 204126000000(2022-03-08 20:41:26) |
DAY_SECOND | 返回天和秒值 | 204208(2022-03-08 20:42:08) |
DAY_MINUTE | 返回天和分钟值 | 2043(2022-03-08 20:43:17) |
DAY_HOUR | 返回天和小时 | 20(2022-03-08 20:43:54) |
YEAR_MONTH | 返回年和月 | 202203(2022-03-08 20:44:23) |
5. 时钟和秒钟转换的函数
-- 将 time 转化为秒并返回后果值,转化公式为:小时 *3600* 分钟 *69+ 秒
SELECT TIME_TO_SEC('2022-03-08 20:44:23')
FROM DUAL;
-- 转换后果:74663
-- seconds 转化为时分秒
SELECT SEC_TO_TIME(74663) FROM DUAL;
-- 转换后果:20:44:23
6. 计算日期和工夫的函数
6.1 计算工夫距离
函数 | 性能 | 备注 |
---|---|---|
DATE_ADD(datetime, INTERVAL expr type),ADDDATE(datetime, INTERVAL expr type) | 计算工夫距离(工夫减少) | expr 示意工夫距离,type 值见下表 |
DATE_SUB(datetime, INTERVAL expr type),SUBDATE(datetime, INTERVAL expr type) | 计算工夫距离(工夫缩小) | expr 示意工夫距离,type 值见下表 |
举例:
SELECT DATE_ADD('2022-03-08 20:43:54', INTERVAL 2 DAY) AS A FROM DUAL;
SELECT ADDDATE('2022-03-08 20:43:54', INTERVAL 2 DAY) AS B FROM DUAL;
-- 返回雷同后果:2022-03-10 20:43:54
SELECT DATE_SUB('2022-03-08 20:43:54', INTERVAL 2 DAY) C FROM DUAL;
SELECT SUBDATE('2022-03-08 20:43:54', INTERVAL 2 DAY) D FROM DUAL;
-- 返回雷同后果:2022-03-06 20:43:54
-- 距离两和类型的工夫时能够用冒号和下划线,要用单引号
SELECT DATE_ADD('2022-03-08 20:43:54', INTERVAL '2:2' DAY_HOUR) AS A FROM DUAL;
SELECT DATE_ADD('2022-03-08 20:43:54', INTERVAL '2_2' DAY_HOUR) AS A FROM DUAL;
-- 返回雷同后果:2022-03-10 22:43:54
type 值如下表:
type 距离类型 | 含意 |
---|---|
HOUR | 小时 |
MINUTE | 分钟 |
SECOND | 秒 |
YEAR | 年 |
MONTH | 月 |
DAY | 日 |
YEAR_MONTH | 年和月 |
DAY_HOUR | 日和小时 |
DAY_MINUTE | 日和分钟 |
DAY_SECOND | 日和秒 |
HOUR_MINUTE | 小时和分钟 |
HOUR_SECOND | 小时和秒 |
MINUTE_SECOND | 分钟和秒 |
6.2 工夫计算
函数 | 性能 | 返回格局 |
---|---|---|
ADDTIME(time1, expr) | 增加 expr 到 time1 并返回后果 | 2022-03-09 21:44:55 |
SUBTIME(time2, expr) | time1 减去 expr 并返回后果 | 2022-03-07 19:42:53 |
DATEDIFF(time1, time2) | 返回 time1 与 time2 的日期距离(time1-time2) | -1(天) |
TIMEDIFF(time1, time2) | 返回 time1 与 time2 的工夫距离(time1-time2) | 26:03:45(时分秒) |
FROM_DAYS(N) | 返回从 0000 年 1 月 1 日起,N 天当前的日期 | 0002-09-27 |
TO_DAYS(time) | 返回工夫 time 间隔 0000 年 1 月 1 日的天数 | 738588 |
LAST_DAY(time) | 返回 time 所在月份的最初一天的日期 | 2022-03-31 |
MAKEDATE(year, n) | 针对给定年份与所在年份中的天数返回一个日期 | 2022-04-10 |
MAKETIME(h, m, s) | 将给定的小时、分钟和秒组合成工夫并返回 | 10:20:33 |
PERIOD_ADD(time,n) | 此函数将给定期间的给定月份数增加到格局 YYMM 或 YYYYMM 中 | 20220309 |
举例:
SELECT DATE_ADD('2022-03-08 20:43:54', INTERVAL '2:2' DAY_HOUR) AS A FROM DUAL;
-- 返回:2022-03-10 22:43:54
SELECT ADDTIME('2022-03-08 20:43:54', '1 1:1:1') FROM DUAL;
-- 返回:2022-03-09 21:44:55
SELECT SUBTIME('2022-03-08 20:43:54', '1 1:1:1') FROM DUAL;
-- 返回:2022-03-07 19:42:53
SELECT DATEDIFF('2022-03-08 20:43:54', '2022-03-09 20:43:54') AS A FROM DUAL;
-- 返回:-1
SELECT TIMEDIFF('2022-03-09 20:43:54', '2022-03-08 18:40:09') AS B FROM DUAL;
-- 返回:26:03:45
SELECT FROM_DAYS(1000) FROM DUAL;
-- 返回:0002-09-27
SELECT TO_DAYS('2022-03-09 20:43:54') FROM DUAL;
-- 返回:738588
SELECT LAST_DAY('2022-03-09 20:43:54') FROM DUAL;
-- 返回:2022-03-31
SELECT MAKEDATE(2022, 100) FROM DUAL;
-- 返回:2022-04-10
SELECT MAKETIME(10, 20, 33) FROM DUAL;
-- 返回:10:20:33
SELECT PERIOD_ADD(20220308,1) FROM DUAL;
-- 返回:20220309
7. 日期的格式化与解析
函数 | 性能 | 返回格局 |
---|---|---|
DATE_FORMAT(date,fmt) | 依照字符串 fmt 格式化日期 date 值 | |
TIME_FORMAT(time,fmt) | 依照字符串 fmt 格式化工夫 time 值 | |
STR_TO_DATE(str, fmt) | 依照字符串 fmt 对 str 进行解析,解析为一个日期 |
fmt 格局如下:
格局符 | 阐明 | 格局符 | 阐明 |
---|---|---|---|
%Y | 4 位数字示意年份 | %y | 示意两位数字的年份 |
%M | 月名示意月份(January,….) | %m | 两位数字示意月份 |
%b | 缩写的月名(Jan.,Feb.,….) | %d | 两位数字示意月中的天数 |
%D | 英文后缀示意月中的天数(1st,2nd,3rd,…) | %c | 数字示意月份 (1,2,3。。) |
%e | 数字模式示意月中的天数(1,2,3,4,5…..) | %h | 两位数字示意小时,12 小时制(01,02。。) |
%H | 两位数字示意小数,24 小时制(01,02..) | %l | 数字模式示意小时,12 小时制 (1,2。。) |
%k | 数字模式的小时,24 小时制 (1,2,3) | %S 和 %s | 两位数字示意秒 (00, 01, 02。。) |
%i | 两位数字示意分钟(00,01,02) | %a | 一周中的星期缩写 (Sun) |
%W | 一周中的星期名称(Sunday…) | ||
%w | 以数字示意周中的天数 (0=Sunday,1=Monday….) | ||
%j | 以 3 位数字示意年中的天数 (001,002…) | %U | 以数字示意年中的第几周,(1,2,3。。)其中 Sunday 为周中第一天 |
%u | 以数字示意年中的第几周,(1,2,3。。)其中 Monday 为周中第一天 | ||
%T | 24 小时制 | %r | 12 小时制 |
%p | AM 或 PM | %% | 示意 % |
举例如下:
SELECT DATE_FORMAT(NOW(), '%H:%i:%s');
-- 返回后果:09:58:12
函数 | 性能 | 返回格局 |
---|---|---|
GET_FORMAT(date_type,format_type) | 返回日期字符串的显示格局 |
format_type 取值如下:
举例如下:
SELECT GET_FORMAT(DATE, 'USA');
-- 返回:%m.%d.%Y
欢送关注我的公众号:『深海云帆』