Retroceder   Foros del Web > Programación para sitios web > Bases de Datos

Tema Cerrado
 
Herramientas Desplegado
Antiguo 24-mar-2004, 07:12   #1 (permalink)
hernael está en el buen camino
 
Fecha de Ingreso: marzo-2004
Mensajes: 17
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
hernael está desconectado  
Antiguo 24-mar-2004, 08:50   #2 (permalink)
Moderador
RootK llegará a ser famoso muy prontoRootK llegará a ser famoso muy pronto
 
Avatar de RootK
 
Fecha de Ingreso: noviembre-2002
Ubicación: México D.F
Mensajes: 7.552
Enviar un mensaje por MSN a RootK
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
__________________
Nadie roba nada ya que en la vida todo se paga . . .
RootK está desconectado  
Antiguo 24-mar-2004, 08:55   #3 (permalink)
hernael está en el buen camino
 
Fecha de Ingreso: marzo-2004
Mensajes: 17
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 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
hernael está desconectado  
Antiguo 24-mar-2004, 10:23   #4 (permalink)
Teri está en el buen camino
 
Fecha de Ingreso: abril-2003
Ubicación: Madrid
Mensajes: 707
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

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
Teri está desconectado  
Antiguo 24-mar-2004, 11:24   #5 (permalink)
hernael está en el buen camino
 
Fecha de Ingreso: marzo-2004
Mensajes: 17
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
hernael está desconectado  
Antiguo 25-mar-2004, 03:04   #6 (permalink)
Teri está en el buen camino
 
Fecha de Ingreso: abril-2003
Ubicación: Madrid
Mensajes: 707
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
Teri está desconectado  
Tema Cerrado

No hay votos aún.


Herramientas
Desplegado

Normas de Publicación
No puedes crear nuevos temas
No puedes responder temas
No puedes subir archivos adjuntos
No puedes editar tus mensajes

BB code is Activado
Caritas están Activado
[IMG] está Activado
Código HTML está Desactivado


La Zona horaria es GMT -6. Ahora son las 19:34.


Message Board Statistics

LinkBacks Enabled by vBSEO 3.1.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93