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.

Foi útil?

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 é?)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top