Pregunta

SELECT * FROM myDateTable 
WHERE date_Start 
OR date_end 
BETWEEN DateValue('" & CoverMonth_start & "') 
AND DateValue('" & CoverMonth_end & "')"

El CoverMonth_start y fechas _end son bucles de enero a diciembre. Esta consulta se supone que seleccione sólo el WHERE date_Start OR date_end BETWEEN DateValue... registros. Sin embargo, esta consulta es la selección de todos los registros en la base de datos.

¿Fue útil?

Solución

Esto se debe a que está haciendo date_Start OR...., esto es la selección de todos los registros que tiene algún valor en date_Start y date_End está en el rango de los valores dados.

Lo que usted debe escribir es la siguiente:

SELECT * FROM myDateTable WHERE
    date_Start BETWEEN DateValue('" & CoverMonth_start & "') AND DateValue('" & CoverMonth_end & "')"
    OR 
    date_end BETWEEN DateValue('" & CoverMonth_start & "') AND DateValue('" & CoverMonth_end & "')"

Otros consejos

Su consulta no es hacer lo que piensa que es.

El OR es su problema -. Actualmente el DATE_START está poblada, se devolverá ese registro

Esta es probablemente la consulta que desea:

 SELECT * FROM myDateTable 
 WHERE (date_Start 
    BETWEEN DateValue('" & CoverMonth_start & "') 
    AND DateValue('" & CoverMonth_end & "')")
 OR (date_end 
    BETWEEN DateValue('" & CoverMonth_start & "') 
    AND DateValue('" & CoverMonth_end & "')")
SELECT * FROM myDateTable WHERE date_Start between date1 and date2 OR date_end BETWEEN date1 and date2
SELECT * 
FROM myDateTable
WHERE (date_start BETWEEN .... AND ....)
OR
(date_end BETWEEN .... AND ....)

OR tiene menor precedencia que BETWEEN.

WHERE date_Start OR date_end BETWEEN a AND b se traduce en WHERE CAST(date_Start AS BOOLEAN) = true OR ( date_end BETWEEN a AND b)

Lo que queremos es ... oh ver otras respuestas (una pregunta fácil, isnt'it?)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top