Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

SQL Selezionare Prossimi compleanni

Nota:l'ho modificato per correggere quello che ritengo fosse un bug significativo. La versione attualmente pubblicata funziona per me.

Questo dovrebbe funzionare dopo aver modificato i nomi dei campi e delle tabelle in modo che corrispondano al tuo database.

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))

Fondamentalmente, ottiene il numero di giorni dal loro compleanno ad oggi e lo divide per 365 (per evitare problemi di arrotondamento che si verificano quando si converte direttamente in anni).

Quindi ottiene il numero di giorni dal loro compleanno a una settimana da adesso e lo divide per 365 per ottenere la loro età tra una settimana.

Se il loro compleanno è entro una settimana, la differenza tra questi due valori sarà 1. Quindi restituisce tutti quei record.