ziehe ich den natürlicheren Stenografie.
Wenn due_date
ist DATE
Typ:
SELECT user_id
FROM due_dates
WHERE due_date = CURDATE() + INTERVAL 1 WEEK
Wenn due_date
eine andere zeitliche ist (DATETIME
, TIMESTAMP
):
SELECT user_id
FROM due_dates
WHERE due_date >= CURDATE() + INTERVAL 1 WEEK
AND due_date < CURDATE() + INTERVAL 1 WEEK + INTERVAL 1 DAY
Dies ermöglicht die optimiser einen verfügbaren Index auf due_date
zu verwenden, und verhindert, dass 23:59:59
Unordnung bei der Verwendung der Inclusive BETWEEN
.
N.B. Dies wird effektiv ein temporäres in ein Datum konvertieren, bevor Sie einen Vergleich durchführen. Eine Zeile mit einem Fälligkeitsdatum von 2000-01-08 10:00:00
wird 7 Tage nach einem NOW()
von 2000-01-01 xx:xx:xx
berücksichtigt und zurückgegeben.
In @ BerndBuffen Antwort, wenn NOW()
kehrt 2000-01-01 09:00:00
, wird die Reihe herausgefiltert werden, und wenn NOW()
kehrt 2000-01-02 09:00:00
, wird die Zeile zurückgegeben werden.
Es ist ein subtiler, aber wichtiger Unterschied.
Ziemlich sicher, es zeigt jetzt + Intervall 1 Woche, nicht minus .. OP will Konten fällig 7 Tage in der Zukunft. – Arth