1

(とりわけ) 次の列を含む MySQL テーブルがあります。

[名前] [メンバー開始日] [メンバー終了日]

誰かのメンバーシップが終了すると、[member_until_date]フィールドに入力されます。それ以外の場合は NULL が含まれます。

次の場合は、純粋に SQL ベースのソリューションが必要です。

誰かがメンバーである期間を計算したい:[member_until_date]がいっぱいになったら、計算する必要があります[member_until_date] - [member_since_date]

誰かがまだメンバーである場合、フィールド[member_until_date]NULLであるため、計算するにはそれが必要[NOW] - [member_since_date]です。

私はこれについて十分に明確であることを願っています.誰かが私に答えてくれることを願っています.

4

2 に答える 2

2

日付の差を日数で取得するには、DATEDIFF() を使用します。条件または別の値に基づいて 1 つの値を取得するには、IF を使用しますが、この場合は同様の IFNULL() を使用しています。

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

IFNULL() は、null でない限り、最初の引数を使用し、次に 2 番目の引数を使用することを示します。

DATEDIFF() は、肯定的な結果を得るために、最初に大きい日付を期待します。

COALESCE() は IFNULL() と同様の機能を提供し、これを行う ANSI SQL の方法になります。

于 2012-04-29T14:11:35.137 に答える
0

を使用した解決策を次に示しDATEDIFF()ます。

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

まず、member_until_dateが null かどうかを確認します。そうである場合は を使用し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
于 2012-04-29T14:12:04.793 に答える