如何在MySql中获取日期差异

时间:2015-01-08 22:42:53

标签: mysql date-difference

在mysql中,我有一个带有列

的用户表

ban_start_date [datetime]

ban_days [int]

这意味着用户被ban_start_date禁止再过ban_days天。如何选择用户表,但添加一个新列,说明它们被禁止还有多少天?

我知道我需要检查NOW()是否在ban_start_dateban_start_date + ban_days之间,如果是,请找出差异。这样的事情。

由于

2 个答案:

答案 0 :(得分:0)

请尝试:

SELECT 
    DATEDIFF(DATE_ADD(banned_users.ban_start_date , INTERVAL banned_users.ban_days DAY), DATE(CURDATE())) AS ban_days_left 
FROM
    users as banned_users
WHERE
    DATE_ADD(banned_users.ban_start_date , INTERVAL banned_users.ban_days DAY) > DATE(CURDATE());

查询仅接受在执行时被禁止的用户,然后将ban_days添加到临时生成 ban-enddate ban_start_date ({ {1}})。之后DATE_ADD(banned_users.ban_start_date , INTERVAL banned_users.ban_days DAY)用于计算 ban-enndate 和今天的日期之间的天数,这实际上应该导致DATEDIFF

答案 1 :(得分:0)

为什么不存储ban_end_date呢?如果你想要,你可以存储ban_days,但你不应该经常需要这个值。

关于存储bad_end_date的好处(我认为)是未被禁止的人将其作为NULL。查找这个值并告诉用户非常容易:

"你被禁止直到ban_end。"

在一天开始时,您将检查具有非NULL bad_end_date值的人,其中ban_end_date< now()并将其设置为NULL。容易。