Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

SQL Sélectionner les anniversaires à venir

Remarque :J'ai modifié ceci pour corriger ce que je pense être un bogue important. La version actuellement publiée fonctionne pour moi.

Cela devrait fonctionner après avoir modifié les noms de champ et de table pour qu'ils correspondent à votre base de données.

SELECT 
  BRTHDATE AS BIRTHDAY
 ,FLOOR(DATEDIFF(dd,EMP.BRTHDATE,GETDATE()) / 365.25) AS AGE_NOW
 ,FLOOR(DATEDIFF(dd,EMP.BRTHDATE,GETDATE()+7) / 365.25) AS AGE_ONE_WEEK_FROM_NOW
FROM 
  "Database name".dbo.EMPLOYEES EMP
WHERE 1 = (FLOOR(DATEDIFF(dd,EMP.BRTHDATE,GETDATE()+7) / 365.25))
          -
          (FLOOR(DATEDIFF(dd,EMP.BRTHDATE,GETDATE()) / 365.25))

Fondamentalement, il obtient le nombre de jours depuis leur anniversaire jusqu'à maintenant et le divise par 365 (pour éviter les problèmes d'arrondi qui surviennent lorsque vous convertissez directement en années).

Ensuite, il obtient le nombre de jours entre leur anniversaire et une semaine à partir de maintenant, et le divise par 365 pour obtenir leur âge dans une semaine.

Si leur anniversaire est dans une semaine, la différence entre ces deux valeurs sera de 1. Il renvoie donc tous ces enregistrements.