Heim >Datenbank >MySQL-Tutorial >Wie kann man Jahrestage innerhalb der nächsten 14 Tage effizient finden und dabei das Jahr außer Acht lassen?

Wie kann man Jahrestage innerhalb der nächsten 14 Tage effizient finden und dabei das Jahr außer Acht lassen?

DDD
DDDOriginal
2025-01-03 09:53:43432Durchsuche

How to Efficiently Find Anniversaries Within the Next 14 Days, Ignoring the Year?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn