Restar días a fecha sin contar fines de semana

Necesito saber como puedo realizar una consulta que me muestre todos aquellos registros que tengan fecha anterior a varios días a la fecha del sistema sin contar los fines de semana, es decir que si hoy es lunes y realizo la consulta para que me de todos aquellos que tengan en el campo fecha anterior a dos días laborables me de los que la fecha sea anterior al jueves de la semana pasada, en lugar de el sábado, como seria si le resto dos días a la fecha de la siguiente forma:
where fecha<to_date(to_char( sysdate-2, 'YYYY-MM-DD'),'YYYY-MM-DD')

2 respuestas

Respuesta
1
Se puede harcer preguntanto por el nombre del día que este en un ramgo determinado.
1. Selecciona los registros con la considion más sencilla que seria los registros de fechas anteriores a la que yo le suministro :
Where fecha < datediff(dd,sysdate,-2)
2. Ahora adiciona a esta condicion que te los ordene en forma descendente
Where fecha < datediff(dd,sysdate,-2)
Order by fecha desc
3. Incluir la condición que solo debe mostrar los días lunes, martes, miércoles, jueves y viernes.
Where fecha < datediff(dd,sysdate,-2)
and datedes(dd,fecha) in ('Monday', 'Tuesday', 'Miercoles', 'Thursday', 'Friday')
Order by fecha desc
Espero que te te sirva de algo la idea. Debes buscar las funciones para la base de datos que utilices, o enviame que base de datos y te devuelgo el código SQL.
Respuesta
1
a), cuando sea consultas SQL, modestia aparte, soy el mejor... aquí esta tu solución, cambia los nombres de los campos por los tuyos y listo:
select fecha
from (
select distinct trunc(campofecha) fecha
from tabla
where trunc(campofecha) < to_date('17/02/2003','dd/mm/yyyy') and
to_number(to_char(campofecha,'d')) < 6
order by trunc(campofecha) desc
)
where rownum <= 2
Esta consulta la hice en Oracle, porque vi que usabas el sysdate, de no ser Oracle me avisas...
La consulta que me envías, esta bien pero me quita todos los fines de semana y no quiero que me quite todos, solo quiero que me quite el fin de semana en la resta es decir, tengo unos registros que deben desaparecer en 24 horas, entonces mi consulta pretende localizar aquellos que no han desaparecido sin contar las ultimas 24 horas claro, pero los domingos no se eliminan dichos registros, entonces si lanzo la consulta el lunes me dan como que deberían haber desaparecido registros del sábado, y eso no es cierto, por que el lunes se deberían contar aquellos que estén desde antes del viernes. De todas formas muchas gracias, pero ya lo he resuelto con la siguiente consulta:
select ... from ... where ... and ((to_char(sysdate,'D')=1 and fx_fecha_exec < to_date(to_char(sysdate-2,'YYYY-MM-DD'),'YYYY-MM-DD')) or(to_char(sysdate,'D')<>1 and fx_fecha_exec < to_date(to_char(sysdate-1,'YYYY-MM-DD'),'YYYY-MM-DD')))
Un saludo y muchas gracias, jmsermol

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas