les anniversaires à venir de mySQL SELECT
Je suis en train d'écrire une requête pour sélectionner les utilisateurs d'une base de données dont les anniversaires sont dans les 7 prochains jours.
J'ai fait beaucoup de recherche mais je ne peux pas venir avec une solution qui fonctionne.
L'anniversaire de champ est stocké comme un varchar par exemple '04/16/93" est-il possible de travailler avec cette?
C'est ce que j'ai à ce jour:
SELECT *
FROM `PERSONS`
WHERE `BIRTHDAY` > DATEADD(DAY, -7, GETDATE())
J'aurais dû faire ça plus clair, je vais essayer de trouver les anniversaires de ne pas les dates de naissance. Donc, je suis juste à la recherche pendant des jours et des mois et des années.
source d'informationauteur Danny
Vous devez vous connecter pour publier un commentaire.
Pour obtenir tous les anniversaires dans les 7 prochains jours, ajouter l'année de la différence entre la date de naissance et aujourd'hui, à la date de la naissance, puis de trouver si elle tombe dans un délai de sept jours.
Si vous souhaitez exclure aujourd'hui l'anniversaire de juste changer
>
à>=
Ici est un DÉMO de toutes les requêtes
C'est ma solution. Il fonctionne également si la date de naissance est le 1er janvier et la date du jour est le 31 décembre.
Elle est très facile et simple. Pas besoin d'utiliser toute si les conditions ou quoi que ce soit d'autre, vous devez simplement utiliser DATE_FORMAT() de mysql.
Voici ma requête sql qui est
essayez ceci:
J'ai réussi à le faire fonctionner avec cette requête. Grâce surtout à l'aide de Lobo réponse.
J'ai trouvé ce code fonctionne très bien:
il fait vraiment simple, c'calculer la personne de l'âge, alors que le courant de l'année anniversaire, puis ajouter 1 an.
sur la base de la réponse de Robert Eisele que vous trouverez ici:
http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html
p.s.
avec cette solution, vous pouvez extraire des gens qui avaient un anniversaire hier (c'est parce que le -1 dans le FROM_DAYS de calcul, mais c'est nécessaire à cause des années bissextiles). cela ne devrait pas envisager de vous puisque vous voulez seulement 7 jours sur la tête de sorte que vous devez juste ajouter la condition suivante:
Accepté la réponse ci-dessus à partir de Lobo est erronée en ce que, si la requête est exécutée le 31 décembre, et l'utilisateur dispose d'un anniversaire sur janvier 1, ils ne seront pas accompagnées.
Vous devez ajouter de la logique de la requête, de sorte que, si l'anniversaire est déjà passé cette année, vous regardez l'ANNÉE PROCHAINE date d'anniversaire, pas cette année. Les détails ci-dessous:
C'est ce que j'ai fait lorsque j'ai été confrontée au même problème :
Tout en essayant d'obtenir la liste qui ont leur b'days à venir dans une gamme de temps, nous pouvons exécuter à quelques questions.
Quand il y a une année bissextile, puis il ya une chance que l'état ne parvient pas à traiter le cas des années bissextiles. Un autre problème pourrait être, comme aujourd'hui, est
2016-12-30
et vous avez besoin b'days pour les 7 prochains jours. De sorte que la fin de la période de l'année2017
. Une condition d'échouer dans cette affaire. Ceux-ci sont très important de cas de test.La plupart des fixes dans ce fil sont à l'aide de la
DAYOFYEAR()
qui échoue lorsque vous êtes sur une année bissextile.par exemple.
DAYOFYEAR('2016-03-01 00:00:00')
est61
.DAYOFYEAR('2015-03-01 00:00:00')
est60
Plus simple et la plus facile à comprendre est ce.
Cela fonctionne sur les années bissextiles et aussi la gamme de dates durée de deux ans.
PS: c'est Aussi la meilleure solution si vous souhaitez commander ces sur la base de la b'days. Vous avez juste besoin d'ajouter un champ.
Nous avons eu des problèmes avec un calendrier pour afficher les dix prochaines anniversaires (y compris les anniversaires d'aujourd'hui).
J'ai réduit la solution que j'ai trouvé pour les parties pertinentes:
Il définit chaque année (y compris l'effectif) pour une année bissextile, donc il n'y aura pas de problèmes avec ça.
Si vous obtenez près de la fin de l'année, il n'est pas un problème, trop.
Je suis tout à fait statisfied de trouver enfin une solution qui fonctionne, donc je voulais le partager, peut-être que c'est de l'utiliser pour quelqu'un d'autre 🙂
P. S.: Si vous ne voulez pas afficher les anniversaires d'aujourd'hui, il suffit d'ajouter un
+1
aprèsDAYOFYEAR(DATE_FORMAT(NOW(),'1980-%m-%d %T'))
Cela fonctionne pour moi.
Bâtiment sur la Lobo, la réponse à attaquer les années bissextiles
Donc une autre approche que vous pouvez prendre est de faire un peu plus de travail avant d'atteindre la couche de base de données. Par exemple, j'ai récemment fait cela dans un Laravel (PHP) et le projet Postgres. En gros, j'ai construit un tableau de dates (ie. la prochaine 7 jours), et a fait un
where in
requête pour rechercher des utilisateurs avec les anniversaires à ces dates.Ici est un simple Code PHP & Requête SQL pour récupérer les prochains anniversaires. Lorsque la date de naissance est stockée en tant que DATE (AAAA-MM-JJ). entrez la description de l'image ici