Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

SQL Select Próximos Aniversários


Observação:editei isso para corrigir o que acredito ser um bug significativo. A versão postada atualmente funciona para mim.

Isso deve funcionar depois que você modificar os nomes de campo e tabela para corresponder ao seu banco de dados.
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))

Basicamente, ele obtém o número de dias de seu aniversário até agora e divide isso por 365 (para evitar problemas de arredondamento que surgem quando você converte diretamente para anos).

Em seguida, obtém o número de dias de seu aniversário até uma semana a partir de agora e divide isso por 365 para obter sua idade daqui a uma semana.

Se o aniversário deles for dentro de uma semana, a diferença entre esses dois valores será 1. Portanto, ele retorna todos esses registros.