sql >> Base de Datos >  >> RDS >> Sqlserver

SQL Seleccionar próximos cumpleaños

Nota:he editado esto para corregir lo que creo que fue un error importante. La versión publicada actualmente funciona para mí.

Esto debería funcionar después de modificar los nombres de campo y tabla para que correspondan a su base de datos.

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

Básicamente, obtiene el número de días desde su cumpleaños hasta ahora y lo divide por 365 (para evitar problemas de redondeo que surgen cuando se convierte directamente a años).

Luego obtiene el número de días desde su cumpleaños hasta una semana a partir de ahora, y lo divide por 365 para obtener su edad dentro de una semana.

Si su cumpleaños es dentro de una semana, entonces la diferencia entre esos dos valores será 1. Entonces devuelve todos esos registros.