Maison >base de données >tutoriel mysql >Comment trouver efficacement les anniversaires dans les 14 prochains jours, en ignorant l'année ?
Comment ignorer les années dans les mathématiques de date
Problème :
Sélectionner les dates qui ont un anniversaire dans le 14 prochains jours, hors composante année.
Original Requête :
SELECT * FROM events WHERE EXTRACT(month FROM "date") = 3 AND EXTRACT(day FROM "date") < EXTRACT(day FROM "date") + 14
Problème :
Les mois se terminent, cette requête peut donc manquer les anniversaires qui surviennent après la fin du mois en cours.
Solutions :
1. Utilisation de Generate Series :
SELECT * FROM events WHERE (date > '2013-03-01' AND date < '2013-04-01')
Cette requête ignore l'année en spécifiant explicitement la plage de dates. Cependant, il n'est pas flexible pour différentes périodes d'anniversaire.
2. Utilisation des mathématiques de date :
SELECT event_date FROM event_table WHERE (event_date >= CURRENT_DATE AND event_date <= CURRENT_DATE + INTERVAL '14 days');
Cette requête utilise les mathématiques de date pour calculer la plage de dates d'anniversaire. C'est plus flexible mais peut fonctionner plus lentement pour les grandes tables.
3. Utilisation d'une fonction (recommandé) :
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';
Cette requête utilise une fonction pour supprimer l'année de la date. Il crée une partition pour chaque année unique, ce qui le rend plus rapide pour les grandes tables.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!