1、日期和时间加减
select now() -- 获取当前具体的日期和时间 2019-11-13 16:38:20
select curdate() -- 获取当前日期 2019-11-13
select curtime() -- 获取当前时间 6:38:20
1.1、MySQL加减某个时间间隔
设置当前日期变量
set @dt = now() -- 设置当前日期
select @dt -- 查询变量值
加减某个时间间隔函数date_add()与date_sub()
date_add('某个日期时间',interval 1 时间种类名);
select date_add(@dt, interval 1 year); //加1年
select date_add(@dt, interval 1 month); //加1月
year:年,quarter:季,month:月,week:周,day:天,hour:小时,minuter:分钟,second:秒,microsecond:毫秒
注:也可以不用变量,直接加减某个时间,如:select date_add('2019-01-01', interval 1 day);
select date_add(now(), interval 1 day); -- 加1天
select date_add(now(), interval 1 hour); -- 加1小时
select date_add(now(), interval 1 minute); -- 加1分钟
select date_add(now(), interval 1 second); -- 加1秒
select date_add(now(), interval 1 microsecond); -- 加1毫秒
select date_add(now(), interval 1 week); -- 加1周
select date_add(now(), interval 1 month); -- 加1月
select date_add(now(), interval 1 quarter); -- 加1季
select date_add(now(), interval 1 year); -- 加1年
MySQL adddate(), addtime()函数,可以用date_add() 来替代。
此外,MySQL 为日期减去一个时间间隔:date_sub()
MySQL date_sub() 日期时间函数 和date_add() 用法一致。
MySQL 中subdate(),subtime()函数,建议,用date_sub()来替代。
1.2、日期相减
datediff(date1,date2):两个日期相减,date1减去date2得到相减之后的天数
select datediff('20191010','20191001') -- 9
timediff(time1,time2):两个时间相减 time1减time2,返回差值。
select timediff('2019-06-03 12:30:00', '2019-06-03 12:29:30') -- 00:00:30
等价于
select timediff('12:30:00', '12:29:30') -- 00:00:30
2、日期计算相差年、月、周、日数整理
2.1、相差年数
SELECT
NOW() 当前日期,
DATE_ADD(NOW(), INTERVAL - 800 DAY) 历史日期,
TIMESTAMPDIFF(YEAR,DATE_ADD(NOW(), INTERVAL - 800 DAY),NOW()) AS 相差年;
当前日期 |历史日期 |相差年 |
--------------------|--------------------|----|
2019-11-13 17:26:30 |2017-09-04 17:26:30 |2 |
2.2、相差月数
SELECT
NOW() 当前日期,
DATE_ADD(NOW(), INTERVAL - 800 DAY) 历史日期,
TIMESTAMPDIFF(MONTH,DATE_ADD(NOW(), INTERVAL - 800 DAY),NOW()) AS 相差月;
当前日期 |历史日期 |相差月 |
--------------------|--------------------|----|
2019-11-13 17:27:49 |2017-09-04 17:27:49 |26 |
2.3、相差周数
SELECT
NOW() 当前日期,
DATE_ADD(NOW(), INTERVAL - 800 DAY) 历史日期,
TIMESTAMPDIFF(WEEK,DATE_ADD(NOW(), INTERVAL - 800 DAY),NOW()) AS 相差周;
当前日期 |历史日期 |相差周 |
--------------------|--------------------|----|
2019-11-13 17:29:11 |2017-09-04 17:29:11 |114 |
2.4、相差天数
整理了一下三种方式:
1)、方式一
SELECT
NOW() 当前日期,
DATE_ADD(NOW(), INTERVAL - 800 DAY) 历史日期,
TIMESTAMPDIFF(DAY,DATE_ADD(NOW(), INTERVAL - 800 DAY),NOW()) AS 相差日;
当前日期 |历史日期 |相差日 |
--------------------|--------------------|----- ----- |
2019-11-13 17:31:45 |2017-09-04 17:31:45 |800 |
2)、方式二
SELECT
TO_DAYS('2019-09-10') - TO_DAYS('2018-09-01') AS 相差天数;
相差天数 |
----- ----- |
374 |
3)、方式三
SELECT
DATEDIFF(NOW(), '2019-09-01') AS 相差天数;
相差天数 |
----- ----- |
73 |
参考:https://blog.csdn.net/qq_39588003/article/details/90758827
https://blog.csdn.net/jiahao1186/article/details/82586889
Mysql 日期和时间加减及日期计算相差年、月、周、日数整理1、日期和时间加减select now()-- 获取当前具体的日期和时间 2019-11-13 16:38:20select curdate()-- 获取当前日期 2019-11-13select curtime()-- 获取当前时间 6:38:201.1、MySQL加减某个时间间隔设置当前...
select
add
time(now(),1); -- 加1秒
2.
add
date
()
有两种用法,第二个参数直接填数字的话是为
日期
加上指定天数,填interval的话是为
日期
加上指定的interval
时间
select
add
date
(now(),1); -- 加1天
select
add
date
(now(), interval 1 day); -- 加1天
select
add
date
(now(), interval 1 hour); --加1小时
select
add
date
(now(), interval 1 minute);
sql中两个
日期
相
减
1、
相差
天数
select trunc(sys
date
,'yyyy')-to_
date
('2009-01-04','yyyy-mm-dd') from dual;
2、
相差
月
数
select months_between(trunc(sys
date
,'mm'),to_
date
('2009-01','yyyy-mm')) from dual;
3、
相差
年
数
select trunc((months_between(trunc(sys
date
,'dd'),to_
date
('2009-0
mysql
时间
运算一.
时间
相
减发现与结果差距很大二.原因三.正确的运算
一.
时间
相
减发现与结果差距很大
mysql
> select t1,t2,t2-t1 from mytest;
+---------------------+---------------------+-------+
| t1 | t2 | t2-t1 |
+---------------------+---------------------+-------+
select (UNIX_
TIMESTAMP
('2022-04-11 23:56:37') - UNIX_
TIMESTAMP
('2022-04-11 22:56:00'))/60 dif_minute from dual 60.6167分
select (UNIX_
TIMESTAMP
('2022-04-12') - UNIX_
TIMESTAMP
('2022-04-11')) dif_minute from dual 86400秒=24个小时
select
TIMESTAMP
DIFF
(day,'2022-