1

私は、その日付の 30 日前に有効期限をチェックし、電子メールのリマインダーを送信することになっている小さなスクリプトを書いています。

'completed'コースが終了した日付を意味する名前の列を持つテーブルがあります。各コースは1年間有効です。

私がやろうとしているのは、最初に「completed」に1年を追加し、その新しい日付が正確に30日前になるかどうかを確認することですnow().

例: コースは 2012 年 12 月 31 日に終了しました。有効期限は 2013 年 12 月 31 日ですTODAY

私はこの小さなスクリプトを持っています:

 SELECT distinct
     userID
     , completed+INTERVAL 1 YEAR AS expires
   FROM activity
  WHERE completed > NOW() + INTERVAL 30 DAY

しかし、明らかにそれは仕事をしていません...誰かが私を正しい方向に向けることができますか?

ありがとう!乾杯、グレッグ

4

2 に答える 2

1

ここで効率を上げるために本当に必要なことは+INTERVAL 1 YEAR、WHERE に降りることです。これは、単純な代数を使用して行うことができます。

completed + (1 YEAR) > NOW + (30 DAYS)

と同一です

completed  > NOW + (30 DAYS) - (1 YEAR)

与える

SELECT distinct
    userID,
    ADDDATE(completed,INTERVAL 1 YEAR) AS expires
FROM activity
-- Used CURRENT_DATE so that time of day is not a factor
WHERE completed > SUBDATE(ADDDATE(CURRENT_DATE,INTERVAL 30 DAY), INTERVAL 1 YEAR)
于 2013-03-28T08:25:59.700 に答える
0

うーん、これ:

SELECT distinct
     userID
     , completed+INTERVAL 1 YEAR AS expires
   FROM activity
  WHERE completed+INTERVAL 1 YEAR > NOW() + INTERVAL 30 DAY
于 2013-03-28T08:24:02.713 に答える