![]() |
sentencia sql para devolver cumpleaños en la semana Hola :-) Soy nuevo haciendo sentencias sql y me surgio una que me tiene loco, quizas sea facil pero e estado investigando y no encuentro nada :-( Tengo una tabla de empleados con 3 campos id_empleado, nombre, fechaNacimiento. El formato de la fecha de nacimiento es como esta 31/01/1977. Quisiera encontrar una sentencia sql que me devuelba las perdonas que cumplan año durante la semana que esta en curso, teniendo en cuenta que el primer dia de lña semana es el Lunes Les agradesco de antemano cuanquier ayuda que me puedan dar :-D |
Hola.. si tu campo fechaNacimiento es de tipo date.. puedes hacer lo siguiente. Cita:
Creo que con estó lo puedes ajustar a lo que necesitas. Saludos ;-) |
muchas gracias por tu respuesta amigo RootK pero esa sentencia ya la prove y no me funciono sdebido a que la fecha en la base de datos tienen años fiferentes :-( pero he seguido investigando y encontre una sentencia que hace algo parecido a lo que yo quiero :-D falta profundizar un poco en ella aver si hace exactamente lo que quiero la sentencia es: SELECT Nombre, id_nombre, FechaNacimiento FROM dbo.Personal WHERE DATEPART(ww, FechaNacimiento)=DATEPAR(ww, { fn NOW() }) gracias por tu interes ;-) |
Hola... la solución que has obtenido es un tanto engañosa, no siempre te va a funciionar Después de probar creo que tengo lo que necesitas, aunque es un poco liosa SELECT FechaAlta, convert(datetime, convert(varchar(4), Year(Getdate())) + '-' + convert(varchar(2), Month(FechaAlta)) + '-' + convert(varchar(2), Day(FechaAlta)))AS FF FROM Empleados WHERE convert(datetime, convert(varchar(4), Year(Getdate())) + '-' + convert(varchar(2), Month(FechaAlta)) + '-' + convert(varchar(2), Day(FechaAlta))) BETWEEN (case WHEN datepart(dw, GetDate()) = 1 THEN GetDate() - 6 ELSE GetDate() - (datepart(dw, GetDate()) - 2) END) AND (case WHEN datepart(dw, GetDate()) = 1 THEN GetDate() ELSE GetDate() + (8 - datepart(dw, GetDate())) END) JEJE :-D En este caso, lo que hago es saber cuando un empleado cumple años en la empresa, cambia FecAlta por FechaNacimiento y listo. El motivo de que sea tan enrevesada, es porque el puñetero SQL se empeña en tener como día uno de la semana el domingo, en fin... supongo que se puede mejorar, (seguro que es mejorable) Un saludo y espero que te sirva de ayuda :adios: |
no esta un poco engorrosa :-( y tienes razon acerca de que la otra sentencia es engañosa encontre otra similar pero tiene un defecto debido a los años biciestos :-( pero creo que me sirve La sentencia es: SELECT Nombre, id_nombre, FechaNacimiento FROM dbo.Personal WHERE DATEPART(y, FechaNacimiento) BETWEEN inferior AND superior donde inferior y superior son los dias del año correspondiente al primer dia de la semana y el ultimo dia de la semana |
Sí... es un poco liosa, la mayoría de la complicación es porque el primer día de la semana es el domingo, pero buscando, encontré la forma de especificar que el primer día de la semana sea el lunes, y la select se simplifica SET DATEFIRST 1 SELECT FechaAlta, Nombre, Apellido1 FROM Empleados WHERE convert(datetime, convert(varchar(4), Year(Getdate())) + '-' + convert(varchar(2), Month(FechaAlta)) + '-' + convert(varchar(2), Day(FechaAlta))) BETWEEN (GetDate() - (datepart(dw, GetDate()) - 1)) AND (GetDate() + (7 - datepart(dw, GetDate()))) Esto es má sencillo, un saludo |
| La zona horaria es GMT -6. Ahora son las 23:39. |
Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.