天天看點

Mysql 日期和時間加減及日期計算相差年、月、周、日數整理

Mysql 日期和時間加減及日期計算相差年、月、周、日數整理

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