SQL entre 2 valores de data ajuda
Pergunta
SELECT * FROM myDateTable
WHERE date_Start
OR date_end
BETWEEN DateValue('" & CoverMonth_start & "')
AND DateValue('" & CoverMonth_end & "')"
o CoverMonth_start
e _end
As datas estão fazendo loop de janeiro a dezembro. Esta consulta deve selecionar apenas os registros WHERE date_Start OR date_end BETWEEN DateValue...
. Mas esta consulta está selecionando todos os registros no banco de dados.
Solução
Isso é porque você está fazendo date_Start OR....
, isso está selecionando todos os registros que têm algum valor em date_Start
e date_End
está no intervalo de valores fornecido.
O que você deve escrever é o seguinte:
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 & "')"
Outras dicas
Sua consulta não está fazendo o que você acha que é.
o OR
é o seu problema - no momento em que o Date_start é preenchido, esse registro será devolvido.
Esta é provavelmente a consulta que você deseja:
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
tem menor precedência do que BETWEEN
.
WHERE date_Start OR date_end BETWEEN a AND b
traduz paraWHERE CAST(date_Start AS BOOLEAN) = true OR ( date_end BETWEEN a AND b)
O que você quer é ... oh, veja outras respostas (uma pergunta fácil, não é?)