计算会员持续时间,直到现在或直到结束日期

时间:2012-04-29 13:56:21

标签: mysql date

我有一个MySQL表(以及其他)以下列:

[name] [member_since_date] [member_until_date]

当某人的成员资格结束时,会填充[member_until_date]字段,否则它包含NULL。

我需要一个基于SQL的纯解决方案:

我想计算某人成为会员的时间:填充[member_until_date]时,我需要它来计算[member_until_date] - [member_since_date]

当某人仍然是会员时,字段[member_until_date]NULL,因此我需要它来计算[NOW] - [member_since_date]

我希望我对此很清楚,我希望有人能给我一个答案。

2 个答案:

答案 0 :(得分:2)

要获取日期之间的差异(以天为单位),请使用DATEDIFF()。要根据条件或其他条件获取一个值,请使用IF,但在这种情况下,我使用的是类似的IFNULL()。

SELECT DATEDIFF(IFNULL(member_until_date, NOW()), member_since_date) AS days_member
FROM ...

IFNULL()表示使用第一个参数,除非它为null,然后使用第二个参数。

DATEDIFF()首先需要更大的日期才能获得正面结果。

COALESCE()提供与IFNULL()类似的功能,并且是ANSI SQL的方法。

答案 1 :(得分:0)

以下是使用DATEDIFF()的解决方案。

SELECT name, DATEDIFF(IF(member_until_date,member_until_date,NOW()),
   member_since_date) AS membership_duration
FROM members;

首先,我们检查member_until_date是否为空。如果是,我们使用NOW(),否则我们使用member_until_date

IF(member_until_date,member_until_date,NOW())

现在我们计算会员的上述和开头之间的日期差异,member_since_date,并且返回为membership_duration

DATEDIFF(IF(member_until_date,member_until_date,NOW()),
   member_since_date) AS membership_duration