关于mysql:MySQL日期时间函数一网打尽

6次阅读

共计 4613 个字符,预计需要花费 12 分钟才能阅读完成。

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

欢送关注我的公众号:『深海云帆』

正文完
 0