簡體   English   中英

MySQL 如果大於 35 天,則計算日期差異

[英]MySQL calculate date diff if greater than 35 days

如果差異大於 35 天,如何計算兩個日期之間的 datediff?

這是我的查詢:

SELECT CONCAT(IF('2017-08-01 10:00:00' < NOW(), '-', ''), FLOOR(HOUR(TIMEDIFF(NOW(), '2017-08-01 10:00:00')) / 24), ' days ',
MOD(HOUR(TIMEDIFF(NOW(),'2017-08-01 10:00:00')), 24), ' hours ', MINUTE(TIMEDIFF(NOW(),'2017-08-01 10:00:00')), ' minutes') AS TimeLeft

但它顯示錯誤的計算。

+------------------------------+
| TimeLeft                     |
+------------------------------+
| -34 days 22 hours 59 minutes |
+------------------------------+

應該至少相差100天。

https://dev.mysql.com/doc/refman/5.7/zh-CN/date-and-time-functions.html#function_timediff說:

TIMEDIFF()返回的結果限於TIME值允許的范圍。

https://dev.mysql.com/doc/refman/5.7/en/time.html說:

TIME值的范圍可能是'-838:59:59'到'838:59:59'。

然后我們意識到

FLOOR(838 hours / 24 hours) = 34

這是一種可行的替代方法(至少直到2038年):

mysql> select concat(
  ceil(tdiff/24/60/60), ' days, ',
  floor(mod(abs(tdiff)/60/60, 24)), ' hours, ',
  floor(mod(abs(tdiff)/60, 60)), ' minutes') as t
from (select unix_timestamp('2017-08-01 10:00:00') - unix_timestamp(now()) as tdiff) as t;
+---------------------------------+
| t                               |
+---------------------------------+
| -100 days, 13 hours, 10 minutes |
+---------------------------------+

這是另一個想法:

mysql> select to_days('1970-01-01')-to_days(td) as days, time(td) as hhmmss
 from (select from_unixtime(abs(unix_timestamp('2017-08-01 10:00:00') - unix_timestamp(now()))); 
+------+----------+
| days | hhmmss   |
+------+----------+
| -100 | 13:18:12 |
+------+----------+

timediff 有一個最大值的限制。 838:59:59 或您發現的大約 35 天。 對於差異較大的查詢,請改用“TIMESTAMPDIFF”。

示例:SELECT id, tstamp, TIMESTAMPDIFF(MINUTE, tstamp, '2037-09-07 07:59:59') FROM work ;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM