2012-04-29 15 views
1

我有一個MySQL表(其中包括)以下的列:calcutate成員資格有效期,到現在爲止,或直到結束日期

 
[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]

我希望我對此足夠清楚,我希望有人對我有一個答案。

+0

我沒有線索如何開始,所以我試過了什麼?不是很多...:$ – Noweem 2012-05-01 11:54:42

回答

2

要獲得日期之間的差異,請以天爲單位使用DATEDIFF()。要基於某個條件或另一個條件獲取一個值,請使用IF,但在這種情況下,我正在使用類似的IFNULL()。

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

IFNULL()表示使用第一個參數,除非它爲空,則使用第二個參數。

DATEDIFF()爲了得到肯定的結果,首先需要較大的日期。

COALESCE()提供了與IFNULL()類似的功能,並且將是執行此操作的ANSI SQL方式。

+0

非常感謝! IFNULL功能對我來說是新的,這正是我所期待的 – Noweem 2012-04-29 15:16:55

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 
相關問題