SQL ENTRE 2 Fecha de valores AYUDA
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.
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?)