SQL: ¿Quién cumpleaños los próximos 7 días?

En ocasiones nos hemos visto en la necesidad de hacer esta pregunta a nuestra base de datos, el problema habitual es que en el campo de Fecha Nacimiento esta almacenado el año real de la celebración, por lo que compararlo con las fechas actuales resulta un poco “complicado”.

Este sería un ejemplo de una tabla de empleados “básica”:

Nombre FechaNacimiento
Antonio Fernández 14/04/1990
Marisa Paredes 15/02/1965
Adrian López 28/02/1978

La consulta para saber quien cumpleaños en los próximos 7 días seria:

SELECT * FROM Personal
WHERE CONVERT(Date, CONVERT(VarChar(4), Year(Getdate()))
+'/'+ CONVERT(VarChar(2), Month(FechaNacimiento))
+'/'+ CONVERT(VarChar(2), Day(FechaNacimiento)))
BETWEEN GETDATE() AND GETDATE()+7

Realmente lo que hacemos es coger la fecha de nacimiento y sustituir el año de nacimiento por el año de la fecha en curso, con eso conseguimos tener una fecha “actual” y podremos compararlas.

Actualización (17/07/2014):

Después de algunos comentarios que indicaban que la función no era válida cuando el año era bisiesto o el cumpleaños era a finales de año, he modificado la consulta que creo que cubre todos los posibles condicionantes comentados.


SELECT * FROM (SELECT *,
DATEADD(Year, YEAR(GETDATE()) - YEAR(FechaNacimiento), FechaNacimiento) AS ThisYear,
DATEADD(Year, YEAR(GETDATE()) - YEAR(FechaNacimiento)+1, FechaNacimiento) AS NextYear FROM Personal) Nacimientos
WHERE (ThisYear BETWEEN GETDATE() AND GETDATE()+7) OR (NextYear BETWEEN GETDATE() AND GETDATE()+7)

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google photo

Estás comentando usando tu cuenta de Google. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s