mysql增加⽇期时分秒_MySql整理篇之⽇期时间
整理MySql使⽤过程中与⽇期时间相关常⽤的函数和⽤法。
⽇期单位:SECOND(秒) MINUTE(分) HOUR(时) DAY(⽇) WEEK(周) MONTH(⽉) QUARTER(季) YEAR(年)
⼀、当前⽇期时间
-- 当前⽇期函数变量
SELECT CURRENT_DATE;-- 变量
SELECT CURDATE();-- 函数
-- 当前时间函数变量
SELECT CURRENT_TIME;-- 变量
SELECT CURTIME();-- 函数
-- 当前时间时间变量
SELECT CURRENT_TIMESTAMP;-- 变量
-- 当前⽇期时间函数
SELECT CURRENT_TIMESTAMP();-- 函数
-- 当前系统⽇期时间
SELECT NOW();-- 执⾏时获取
SELECT SYSDATE();-- 执⾏中获取
⼆、⽇期加 DATE_ADD
格式:DATE_ADD(objDate,INTERVAL X UNION),objDate 为⼀个⽇期,INTERVAL 为关键字,X 为数值(正加负减) UNION 为⽇期单位。
注意:X为负的时候DATE_ADD=DATE_SUB两个函数正好相反。UNION单位可到时间层级。
-- 当前加⼀天
SELECT DATE_ADD(CURRENT_DATE,INTERVAL 1 DAY);
-- 当前减⼀天
SELECT DATE_ADD(CURRENT_DATE,INTERVAL -1 DAY);
-- 当前加⼀周
SELECT DATE_ADD(CURRENT_DATE,INTERVAL 1 WEEK);
-- 当前减⼀周
SELECT DATE_ADD(CURRENT_DATE,INTERVAL -1 WEEK);
-- 当前加⼀⽉
SELECT DATE_ADD(CURRENT_DATE,INTERVAL 1 MONTH);
-- 当前减⼀⽉
SELECT DATE_ADD(CURRENT_DATE,INTERVAL -1 MONTH);
-- 当前加⼀季
SELECT DATE_ADD(CURRENT_DATE,INTERVAL 1 QUARTER);
-- 当前减⼀季
SELECT DATE_ADD(CURRENT_DATE,INTERVAL -1 QUARTER);
-- 当前加⼀年
SELECT DATE_ADD(CURRENT_DATE,INTERVAL 1 YEAR);
-- 当前减⼀年
SELECT DATE_ADD(CURRENT_DATE,INTERVAL -1 YEAR);
-- 也可⽤于到时间层级
SELECT DATE_ADD(NOW(),INTERVAL 1 SECOND);
SELECT DATE_ADD(NOW(),INTERVAL 1 MINUTE);
SELECT DATE_ADD(NOW(),INTERVAL 1 HOUR);
三、⽇期减 DATE_SUB
格式:DATE_ADD(objDate,INTERVAL X UNION),objDate 为⼀个⽇期,INTERVAL 为关键字,X 为数值(正减负加) UNION 为⽇期单位。
注意:X为负的时候DATE_SUB=DATE_ADD两个函数正好相反。UNION单位可到时间层级。⾄于使⽤跟DATE_ADD⼀样,⼀般使⽤DATE_ADD⾜矣。
-- 当前减⼀天
SELECT DATE_SUB(CURRENT_DATE,INTERVAL 1 DAY);
-- 当前加⼀天
SELECT DATE_SUB(CURRENT_DATE,INTERVAL -1 DAY);
四、⽇期差 DATEDIFF
格式:DATEDIFF(dateA,dateB) dateA与dateB相差天数,dateA>bateB结果⼤于0,dateA
SELECT DATEDIFF(CURRENT_DATE,'2020-02-29');-- ⼤于0
SELECT DATEDIFF('2020-02-29',CURRENT_DATE);-- ⼩于0
SELECT DATEDIFF(CURRENT_DATE,CURRENT_DATE);-- 等于0
五、时间差 TIMEDIFF
格式:DATEDIFF(timeA,timeB) timeA与timeB相差的时间,返回时分秒时间格式。
-- 返回时间格式,即相差多少⼩时多少分多少秒
SELECT TIMEDIFF(CURRENT_TIME,'00:01:00');
SELECT TIMEDIFF(NOW(),NOW());
六、指定单位⽇期时间差 TIMESTAMPDIFF
格式:TIMESTAMPDIFF(UNION,dateTime1,dateTime2) 返回dateTime1与dateTime相差单位的数值,从dateTime1到dateTime2相差的单位数值,x=dateTime2-dateTime1,UNION ⽇期单位的值如下:
SECOND MINUTE HOUR DAY WEEK MONTH QUARTER YEAR
SELECT TIMESTAMPDIFF(SECOND,'2019-01-01 11:11:11',NOW());
SELECT TIMESTAMPDIFF(MINUTE,'2019-01-01 11:11:11',NOW());
SELECT TIMESTAMPDIFF(HOUR,'2019-01-01 11:11:11',NOW());
SELECT TIMESTAMPDIFF(DAY,'2019-01-01 11:11:11',NOW());
SELECT TIMESTAMPDIFF(WEEK,'2019-01-01 11:11:11',NOW());
SELECT TIMESTAMPDIFF(MONTH,'2019-01-01 11:11:11',NOW());
SELECT TIMESTAMPDIFF(QUARTER,'2019-01-01 11:11:11',NOW());
SELECT TIMESTAMPDIFF(YEAR,'2019-01-01 11:11:11',NOW());
七、⽇期格式化 DATE_FORMAT
格式:DATE_FORMAT(date,formatStr)。
注意:formatStr所到的层级date需要有值,否则为0;date可以是字符串和⽇期类型。SELECT DATE_FORMAT(NOW(),'%Y');-- 年层级
unix时间戳转换日期格式SELECT DATE_FORMAT(NOW(),'%Y-%m');-- 年⽉层级
SELECT DATE_FORMAT(NOW(),'%Y-%m-%d');-- 年⽉⽇期层级
SELECT DATE_FORMAT(NOW(),'%Y-%m-%d %H:%i:%s');-- 年⽉⽇时分秒层级SELECT DATE_FORMAT(NOW(),'%H');-- 时层级
SELECT DATE_FORMAT(NOW(),'%H:%i');-- 时分层级
SELECT DATE_FORMAT(NOW(),'%H:%i:%s');-- 时分秒层级
⼋、时间戳⽇期互转
1、⽇期转为时间戳 UNIX_TIMESTAMP
返回⼗位长度的时间戳数字
SELECT UNIX_TIMESTAMP(CURRENT_DATE);
SELECT UNIX_TIMESTAMP(NOW());
2、时间戳转为⽇期 FROM_UNIXTIME
⼗位长度的时间戳数字或字符串转为对应的⽇期
SELECT FROM_UNIXTIME('1592928000');
SELECT FROM_UNIXTIME('1593003664');
九、字符串转为⽇期 STR_TO_DATE
格式:STR_TO_DATE(objDateTimeStr,formatStr)
注意:formatStr所到的层级objDateTimeStr也须到,否则为0
-- ⽬标字符串时间层级没有默认为 00:00:00
SELECT STR_TO_DATE('2020-02-01','%Y-%m-%d %H:%i:%s');
SELECT STR_TO_DATE('2020-06-24 21:03:06','%Y-%m-%d %H:%i:%s');
⼗、其他⼀些函数
EXTRACT 获取⽇期中的⽬标
SELECT EXTRACT(SECOND FROM NOW());-- 获取时间所属的秒SELECT EXTRACT(MINUTE FROM NOW());-- 获取时间所属的分SELECT EXTRACT(HOUR FROM NOW());-- 获取时间所属的时SELECT EXTRACT(DAY FROM NOW());-- 获取时间所属的⽇
SELECT EXTRACT(WEEK FROM NOW());-- 获取时间所属的周SELECT EXTRACT(QUARTER FROM NOW());-- 获取时间所属的季SELECT EXTRACT(YEAR FROM NOW());-- 获取时间所属的年
LAST_DAY 获取当前⽇期所属⽉的最后⼀天
SELECT LAST_DAY('2020-02-01');
MAKEDATE 某天开始多少天后的⽇期
SELECT MAKEDATE(2020,31); -- '2020-01-31' day of year MAKETIME 时分秒组成⼀个⽇期
SELECT MAKETIME(12,15,30); -- '12:15:30' hour minuts seccond TIME_TO_SEC 时间转化成秒
-- 时间转为秒
SELECT TIME_TO_SEC('01:20:15'); -- 4815 秒
-
- 求两个时间相差多少秒
SELECT TIME_TO_SEC('01:30:15')-TIME_TO_SEC('01:20:15');-- 600 SELECT TIME_TO_SEC(TIMEDIFF('01:30:15','01:20:15'));-- 600 SEC_TO_TIME 秒转化成时间
SELECT SEC_TO_TIME(362);-- 6分2秒
TO_DAYS ⽬标⽇期幻化成天数,从0000-00-00开始 不常⽤
SELECT TO_DAYS(CURRENT_DATE);
FROM_DAYS ⽬标天数幻化成⽇期,从0000-00-00开始 不常⽤SELECT FROM_DAYS(1);
SELECT FROM_DAYS(360);
SELECT FROM_DAYS(365);
SELECT FROM_DAYS(366);
SELECT FROM_DAYS(737965);
CONVERT_TZ 时区转换
格式:CONVERT_TZ(objDateTimeStr,fromTimeZone,toTimeZone)
-- 08时区转到00时区,即8个⼩时前
SELECT CONVERT_TZ('2020-01-01 12:00:00','+08:00','+00:00'); -- 这种⼏个⼩时前后等也可以⽤ DATE_ADD和DATE_SUB来实现
-- 8个⼩时前
SELECT DATE_SUB('2020-01-01 12:00:00',INTERVAL 8 HOUR); SELECT DATE_ADD('2020-01-01 12:00:00',INTERVAL -8 HOUR);各函数之间搭配使⽤能达到意想不到的效果
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论