MySQL 日期计算

目录

1、日期和时间加减

1.1、MySQL加减某个时间间隔

1.2、日期相减

2、日期计算相差年、月、周、日数整理

2.1、相差年数

2.2、相差月数

2.3、相差周数

2.4、相差天数

方式一

方式二

方式三


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:毫秒

<aside> 💡 注:也可以不用变量,直接加减某个时间,如:select date_add('2019-01-01', interval 1 day);

</aside>

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:302017-09-04 17:26:302

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:492017-09-04 17:27:4926

2.3、相差周数

SELECT
  NOW() 当前日期,
  DATE_ADD(NOW(), INTERVAL - 800 DAY) 历史日期,
  TIMESTAMPDIFF(WEEK,DATE_ADD(NOW(), INTERVAL - 800 DAY),NOW()) AS 相差周;
当前日期历史日期相差周
2019-11-13 17:27:492017-09-04 17:27:49114

2.4、相差天数

方式一

SELECT
  NOW() 当前日期,
  DATE_ADD(NOW(), INTERVAL - 800 DAY) 历史日期,
  TIMESTAMPDIFF(DAY,DATE_ADD(NOW(), INTERVAL - 800 DAY),NOW()) AS 相差日;
当前日期历史日期相差日
2019-11-13 17:27:492017-09-04 17:27:49800

方式二

SELECT
    TO_DAYS('2019-09-10') - TO_DAYS('2018-09-01') AS 相差天数;

方式三

SELECT
  DATEDIFF(NOW(), '2019-09-01') AS 相差天数;
  • 5
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值