Heim >Datenbank >MySQL-Tutorial >Wie kann man Jahrestage innerhalb der nächsten 14 Tage effizient finden und dabei das Jahr außer Acht lassen?
So ignorieren Sie Jahre in der Datumsrechnung
Problem:
Wählen Sie Daten aus, die einen Jahrestag haben nächsten 14 Tage, ohne Jahreskomponente.
Original Abfrage:
SELECT * FROM events WHERE EXTRACT(month FROM "date") = 3 AND EXTRACT(day FROM "date") < EXTRACT(day FROM "date") + 14
Problem:
Monate werden umbrochen, sodass bei dieser Abfrage möglicherweise Jahrestage übersehen werden, die nach dem Ende des aktuellen Monats liegen.
Lösungen:
1. Verwenden von „Generate Series“:
SELECT * FROM events WHERE (date > '2013-03-01' AND date < '2013-04-01')
Diese Abfrage ignoriert das Jahr, indem sie den Datumsbereich explizit angibt. Es ist jedoch nicht flexibel für verschiedene Jubiläumszeiträume.
2. Datumsberechnung verwenden:
SELECT event_date FROM event_table WHERE (event_date >= CURRENT_DATE AND event_date <= CURRENT_DATE + INTERVAL '14 days');
Diese Abfrage verwendet Datumsberechnung, um den Datumsbereich für den Jahrestag zu berechnen. Es ist flexibler, kann aber bei großen Tabellen langsamer sein.
3. Verwenden einer Funktion (empfohlen):
CREATE FUNCTION get_anniversary(date date) RETURNS date AS BEGIN RETURN date PARTITION BY YEAR; END; SELECT event_date FROM event_table WHERE get_anniversary(event_date) >= CURRENT_DATE AND get_anniversary(event_date) <= CURRENT_DATE + INTERVAL '14 days';
Diese Abfrage verwendet eine Funktion, um das Jahr aus dem Datum zu entfernen. Es erstellt eine Partition für jedes einzelne Jahr, was die Arbeit bei großen Tabellen beschleunigt.
Das obige ist der detaillierte Inhalt vonWie kann man Jahrestage innerhalb der nächsten 14 Tage effizient finden und dabei das Jahr außer Acht lassen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!