Foros del Web

Foros del Web (http://www.forosdelweb.com/)
-   Bases de Datos General (http://www.forosdelweb.com/f21/)
-   -   sentencia sql para devolver cumpleaños en la semana (http://www.forosdelweb.com/f21/sentencia-sql-para-devolver-cumpleanos-semana-190957/)

hernael 24/03/2004 08:12

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

RootK 24/03/2004 09:50

Hola.. si tu campo fechaNacimiento es de tipo date.. puedes hacer lo siguiente.

Cita:

select *
from tu_tabla
where fechaNacimiento between getdate() and dateadd (day,7,getdate())
Con dateadd , lo que hago es tomar el día actual y que me muestre los de 7 días siguiente, y con getdate me devuelve la fecha actual.

Creo que con estó lo puedes ajustar a lo que necesitas.

Saludos ;-)

hernael 24/03/2004 09:55

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

Teri 24/03/2004 11:23

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:

hernael 24/03/2004 12:24

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

Teri 25/03/2004 04:04

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.