0
votes

vérifier si une date de naissance est à venir dans un tableau de données

Voici la question. J'obtiens le résultat en nombre de jours entre la date de naissance et maintenant. mais j'ai besoin de savoir s'il s'agit de 5 jours à partir de la date actuelle.

select *, datediff(DAY , DateOfBirth,GETDATE()) as diff
    From Table_A
    order by DateOfBirth asc


15 commentaires

Salut, vous avez une question?


Mysql n'a pas getdate Cette question est-elle correctement étiquetée?


Était-ce censé être une réponse à la question de quelqu'un d'autre?


Ceci est la question. J'obtiens le résultat en nombre de jours depuis la date de naissance jusqu'à maintenant. mais j'ai besoin de savoir si c'est à venir 5 jours à compter de la date maintenant


MYSQL ou SQLSERVER?


Vous pouvez utiliser quelque chose comme ceci comme base SELECT DATEDIFF (DATE_FORMAT (DateOfBirth, CONCAT (YEAR (NOW ()), '-% m-% d% T')), NOW ()) AS diff mais cela ne fonctionne pas pour les cas où l'anniversaire est du 1er au 5 janvier, par exemple


mysql version 2014 p.salmon


mysql prend en charge getdate ()?


Version 2014 Donc son SQLServer alors


C'est son sql mais microsoft sql server je suppose


oui serveur sql c'est


Pouvez-vous s'il vous plaît reformater la question, ajouter des exemples de données d'entrée et de sortie attendues


Je pense qu'il essaie d'obtenir # de jours avant son anniversaire à partir d'aujourd'hui. prendra donc en considération le jour de l'année.


Copie possible de SQL Select Upcoming Birthdays


@vishal. . . Comment savoir si la date de naissance d'une personne sera dans cinq jours? La question n'a pas de sens. Je suppose que vous voulez des anniversaires.


3 Réponses :


-1
votes

D'après ce que j'ai compris, vous devez recevoir les anniversaires à venir dans les 5 prochains jours. Dans MySQL vous pouvez faire avec la requête ci-dessous,

SELECT *, DATE_FORMAT(DateOfBirth,'%m-%d') AS md 
FROM Table_A 
WHERE DATE_FORMAT(DateOfBirth,'%m-%d') BETWEEN DATE_FORMAT(CURDATE(), '%m-%d')
AND DATE_FORMAT(DATE_ADD(CURDATE(), INTERVAL 5 DAY), '%m-%d')
ORDER BY md

Il renverra tous les anniversaires entre le 07 et le 12 août. Obtenez les jours actuels et +5 du côté du script .

Si vous voulez une solution basée sur une requête pure sans aucun calcul pour les dates du côté du script, reportez-vous à la requête suivante,

SELECT *, DATE_FORMAT(DateOfBirth,'%m-%d') AS md 
FROM Table_A 
WHERE DATE_FORMAT(DateOfBirth,'%m-%d') BETWEEN '08-07' AND '08-12'
ORDER BY md


2 commentaires

en lisant les commentaires sous la question, il semble que cela soit nécessaire pour SQL Server, pas pour mysql


C'est bon. Quelqu'un dans le futur pourrait répondre à cette question pour la variante MySQL.



0
votes
SELECT *
FROM Table_A WHERE DateOfBirth BETWEEN GETDATE()
   AND DATEADD(day,5, Convert(Date,GETDATE()))
it will give you all the birthdays in the next 5 days.

0 commentaires

0
votes

Si vous recherchez les anniversaires, vous pouvez faire quelque chose comme:

DECLARE @dates AS TABLE ( DateOfBirth DATE );
DECLARE @number_of_days INT = 5;

INSERT  INTO @dates
        ( DateOfBirth )
VALUES  ( '20090101' ),
        ( '20090809' ),
        ( '20090816' ),
        ( '20180807' );

SELECT  * ,
        DATEDIFF(DAY, SYSDATETIME(), bd.this_year_birthday)
FROM    @dates d
        CROSS APPLY ( SELECT    DATEFROMPARTS(YEAR(SYSDATETIME()),
                                              MONTH(d.DateOfBirth),
                                              DAY(d.DateOfBirth)) AS this_year_birthday
                    ) bd
WHERE   DATEDIFF(DAY, SYSDATETIME(), bd.this_year_birthday) BETWEEN 0
                                                            AND
                                                              @number_of_days;


0 commentaires