none
Como quitar sabdos y domingos de un rango de fechas

    Question

  • S.O.S necesito ayuda urgente estoy haciendo un programa donde programos cursos, entonces cuando voy a seleccionar el instructor mando a ejecutar un query que me traiga todos aquelllos instructores que no esten ocupados en ese rango de fechas y ni en  un determinado horario pero mi problema surguio cuando realize la siguente operacion: Programe a un instructor con un curso con el siguiente rango de fechas del 18/02/2011 al 21/02/2011 el curso debe durar solamente dos dias, para lo cual curso solo se dio el 18 y 21  entonces los dias 19,20 quedan libre  y es posible volver  utilizar a ese instructor pero como tengo el query me aparece que esta ocupado ese instructor cuando en verdad no es asi porque solo se ocupo el 18 y 21 dejadolo libre para el 19 y 20 aqui esta el query que realizamos mi encarga y yo :

    sql = "select idInstructor,nombreinstructor" _

         & " from CCO_Instructores where idInstructor not in (select idInstructor from CCO_ControlCurso  where Estatusevento<>'C' and  ((FechaInicio   between '" & fechainicio & "' and '" & fechafinal & "' or FechaTerminacion  between '" & fechainicio & "' and '" & fechafinal & "') or (FechaInicio<='" & fechainicio & "' and FechaTerminacion>='" & fechafinal & "')) and (idHorario in (select idhorario from cco_horarios where ((dateadd(n,1,horainicio - cast(floor(cast(horainicio as float)) as datetime)) between '" & horaini & "' and '" & horaterminos & "')or (horatermino - cast(floor(cast(horatermino as float)) as datetime) between '" & horaini & "' and '" & horaterminos & "' )) or (horainicio - cast(floor(cast(horainicio as float)) as datetime)>='" & horaini & "' and horatermino - cast(floor(cast(horatermino as float)) as datetime)<='" & horaterminos & "')or (horainicio - cast(floor(cast(horainicio as float)) as datetime)<'" & horaini & "'and" _

         & " horatermino - cast(floor(cast(horatermino as float)) as datetime)>'" & horaterminos & "'))))"

    ESPERO Y ME PUEDAN AYUDAR SOLO TENGO ESTA SEMANA PPRFAVOR LES PIDO AYUDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

    Wednesday, February 23, 2011 9:02 AM

Answers

  • Además de lo que te comenta Alberto, debes tener en cuenta que no sólo deberías excluir los sábados y domingos, sino también los días festivos. Por ello, lo mejor es que te crees una tabla calendario en el que marques las fechas que son festivas.

    Puedes encontrar multitud de ejemplos de cómo crear esta tabla, por ejemplo http://sqlblogcasts.com/blogs/tonyrogerson/archive/2008/01/20/calendar-table-example-and-how-to-use-it.aspx

    Wednesday, February 23, 2011 11:31 AM
  • Hola.

    La función datepart te da la información del día de la semana:

    set datefirst 1
    select datepart(dw, getdate())
    

    Si lo que quieres es quitar los sábados y los domingos, fijando el primer día de la semana en el Lunes, tendrías que excluir los días del fin de semana:

    set datefirst 1
    select ...
    ...
    and datepart(dw, MiCampoFecha) <= 5
    

    Si en tu caso necesitas realizar recuentos de días, necesitarás una tabla de días. Puedes obtenerla con una cte, como explico aquí:

    http://qwalgrande.blogspot.es/1255098540/me-gustan-las-ctes-(tabla-de-dias)/

    Si no lo logras, nos dices.


    Alberto López Grande
    SQL Server MVP
    Visita mi blog en http://qwalgrande.blogspot.es/

    Wednesday, February 23, 2011 9:30 AM
    Moderator

All replies

  • Hola.

    La función datepart te da la información del día de la semana:

    set datefirst 1
    select datepart(dw, getdate())
    

    Si lo que quieres es quitar los sábados y los domingos, fijando el primer día de la semana en el Lunes, tendrías que excluir los días del fin de semana:

    set datefirst 1
    select ...
    ...
    and datepart(dw, MiCampoFecha) <= 5
    

    Si en tu caso necesitas realizar recuentos de días, necesitarás una tabla de días. Puedes obtenerla con una cte, como explico aquí:

    http://qwalgrande.blogspot.es/1255098540/me-gustan-las-ctes-(tabla-de-dias)/

    Si no lo logras, nos dices.


    Alberto López Grande
    SQL Server MVP
    Visita mi blog en http://qwalgrande.blogspot.es/

    Wednesday, February 23, 2011 9:30 AM
    Moderator
  • Además de lo que te comenta Alberto, debes tener en cuenta que no sólo deberías excluir los sábados y domingos, sino también los días festivos. Por ello, lo mejor es que te crees una tabla calendario en el que marques las fechas que son festivas.

    Puedes encontrar multitud de ejemplos de cómo crear esta tabla, por ejemplo http://sqlblogcasts.com/blogs/tonyrogerson/archive/2008/01/20/calendar-table-example-and-how-to-use-it.aspx

    Wednesday, February 23, 2011 11:31 AM
  • SEÑOR ALBERTO LOPEZ GRANDE MIL GRACIAS EN SERIO ESTOY MUY AGRADECIDO Y LE DOY GRACIAS A DIOS QUE HAYAN PERSONAS EXTRAOORDIANRIAS COMO TODA LAS QUE CONFORMAN ESTE ESPACIO Y QUE SOBRE TODO COMPARTEN SUS CONOCIMINETOS CON NOSOTROS QUE MUY APENAS EMPEZAMOS EN ESTO YA IMPLEMENTE LA SUGUERENCIA QUE ME DIO Y AL PARECER YA FUNCIONA CORRECTAMEMTE PERO SEGUIRE ANALIZANDO EL SISTEMAS PARA EVITAR OTRO FALLO Y TENDRE EN CUENTA DE LO DE CREAR UN TABAL CALENDARIO PERO POR EL MOMENTO ME HAN SALVADO LA VIDA MIL GRACIAS SON EXTRAOORDIANRIOS ESPERO LLEGAR A SABER UN POCO DE LO QUE USTEDES SABEN MUCHAS GRACIAS NO ME QUEDA NADA MAS QUE AGRADECERLES SU TIEMPO Y CONOCIMINETO BRINDADO OJALA HUIBIESE TENIDO MAESTROS COMO USTEDES DE OTRA GALAXIA MUCHAS GRACIAS Y HASTA LUEGO ......

    Wednesday, February 23, 2011 9:27 PM