none
Consulta para intervalos de fechas RRS feed

  • Pregunta

  • Buenas noches, tengo la siguiente consulta 

    SELECT*
    FROM dbo.Medico AS med
         INNER JOIN dbo.HorariosMedicos AS hmed ON hmed.medCol = med.CMPMedico
         left outer JOIN dbo.Cita AS cit ON cit.MedicoCita = hmed.PaternoMed+' '+hmed.MaternoMed+', '+hmed.NombresMed
    WHERE(med.Especialidad = 'ANESTESIOLOGIA ')
        AND '21/03/2019' in('25/03/2019', '29/03/2019')

    Cuando ingreso el horario de un médico le pongo en un intervalo de fechas (por ejemplo por semana - del 19/03/2019 (fecha inicial) 26/03/2019 (fecha final)), 

    la consulta es como hacer una búsqueda entre esas fechas de intervalo porque guarda una fecha inicial y una final, si busco la fecha inicial o final si obtengo resultado pero si pongo una fecha comprendida entre ese intervalo no me vota resultado como puedo hacer la consulta para esa búsqueda (los campos se guardan como datetime

    martes, 26 de marzo de 2019 1:35

Todas las respuestas

  • Hola, con el operador in buscas un valor que sea exactamente igual al que está dentro del in,por lo que la consulta tal como la muestras no devolverá nada , sería mas conveniente usar el between

    BETWEEN (Transact-SQL)


    Votar y marcar respuestas es agradecer.
    Saludos.
    Lima-Perú

    martes, 26 de marzo de 2019 4:10
  • Hola

    en este hilo puede ayudarte

    Filtro entre fechas

    martes, 26 de marzo de 2019 4:17
  • Hola edisonsr.95:

    DECLARE @INTERVALOMIN DATETIME = '20190325';
    DECLARE @INTERVALOMAX DATETIME = '20190329';
    /* COMO EL INTERVALO ES DATETIME, Y LOS CICLOS DE HORAS SE MUEVEN HASTA 
    LAS 23:59:59.997 INCLUIDO, LE SUMO 1 DIA
    ALGO QUE EVIDENTEMENTE, PODÍA HABER REALIZADO DECLARANDO EL CAMPO COMO 20190330
     */
    
    SET @INTERVALOMAX = DATEADD(DAY,1,@INTERVALOMAX);
    SELECT *
    FROM dbo.Medico AS med
         INNER JOIN dbo.HorariosMedicos AS hmed ON hmed.medCol = med.CMPMedico
         left outer JOIN dbo.Cita AS cit ON cit.MedicoCita = hmed.PaternoMed+' '+hmed.MaternoMed+', '+hmed.NombresMed
    WHERE (med.Especialidad = 'ANESTESIOLOGIA ')
        AND CAST(ColumnaMedicoDateTime as date) >= @INTERVALOMIN
       and CAST(ColumnaMedicoDateTime as date) < @INTERVALOMAX

    Si trabajas las fechas en formato yyyyMMdd sin separadores, no tendrás ningún problema con configuraciones de idioma o lenguaje de las conexiones.

    Usa el mayor o igual que la fecha de inicio, y menor que el dia siguiente a la fecha final, para que incluya todos los del rango del último dia deseado.

    Intenta utilizar variables, no literales.

    Y si puedes, intenta normalizar esa relación entre las tablas Medico y Cita, ya que no es el modo más óptimo, enlazar una tabla, por varias columnas anexando espacios y comas.

    • Propuesto como respuesta Carlos_Ruiz_M jueves, 28 de marzo de 2019 15:57
    martes, 26 de marzo de 2019 4:34