SQL МЕЖДУ 2 значениями даты ПОМОГИТЕ - PullRequest
0 голосов
/ 21 декабря 2009
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.... Но этот запрос выбирает все записи в базе данных.

Ответы [ 5 ]

3 голосов
/ 21 декабря 2009

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

Ваша проблема - 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 & "')")
1 голос
/ 21 декабря 2009

Это потому, что вы делаете 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 & "')"
0 голосов
/ 21 декабря 2009

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)

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

0 голосов
/ 21 декабря 2009
SELECT * 
FROM myDateTable
WHERE (date_start BETWEEN .... AND ....)
OR
(date_end BETWEEN .... AND ....)
0 голосов
/ 21 декабря 2009
SELECT * FROM myDateTable WHERE date_Start between date1 and date2 OR date_end BETWEEN date1 and date2
...