Вопрос

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

Тот Самый CoverMonth_start и _end даты меняются с января по декабрь.Предполагается, что этот запрос выбирает только записи WHERE date_Start OR date_end BETWEEN DateValue....Но этот запрос выбирает все записи в базе данных.

Это было полезно?

Решение

Это потому, что вы делаете date_Start OR...., это выбор всех записей , которые имеют КАКОЕ - ЛИБО значение в date_Start и date_End находится в заданном диапазоне значений.

Вот что вам следует написать:

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 & "')"

Другие советы

Ваш запрос выполняет не то, что вы думаете.

Тот Самый OR это ваша проблема - в тот момент, когда date_start будет заполнен, эта запись будет возвращена.

Вероятно, это именно тот запрос, который вам нужен:

 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 имеет более низкий приоритет, чем BETWEEN.

WHERE date_Start OR date_end BETWEEN a AND b переводится как WHERE CAST(date_Start AS BOOLEAN) = true OR ( date_end BETWEEN a AND b)

то, чего ты хочешь, это...о, смотрите другие ответы (простой вопрос, не так ли?)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top