Maison > base de données > tutoriel mysql > Comment trouver efficacement les anniversaires dans les 14 prochains jours, en ignorant l'année ?

Comment trouver efficacement les anniversaires dans les 14 prochains jours, en ignorant l'année ?

DDD
Libérer: 2025-01-03 09:53:43
original
410 Les gens l'ont consulté

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

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
Copier après la connexion

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')
Copier après la connexion

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');
Copier après la connexion

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';
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal