Как написать сценарий SQL «между», который не включает тот же день - PullRequest
0 голосов
/ 18 ноября 2011

Я ищу, чтобы извлечь все записи, которые myDate находятся между startDate и 'endDate', но не возвращают записи с точно такой же датой.Я использую MS SQL 2005.

Я пытался:

Select *
From myDatabase
Where empId = 145
and myDate between startDate and endDate

Но если бы myDate был '11 / 16/2011 ', вышеприведенный запрос вернул бы записи, которые также имеют startDate и endDate = '11 / 16/2011'.Это не то, что я хочу.Я не хочу записи, которые имеют startDate и endDate = myDate

Поэтому я попытался:

Select *
From myDatabase
Where empId = 145
and myDate between startDate and endDate
and (myDate <> startDate AND myDate <> endDate)

Будет ли это работать для всех случаев?

Ответы [ 5 ]

5 голосов
/ 18 ноября 2011

a1ex07 прав в том, что это будет работать

myDate > startDate AND myDate < endDate

Если вы настаиваете на использовании BETWEEN, то это также будет работать

mydate BETWEEN startDate + INTERVAL 1 DAY AND endDate - INTERVAL 1 DAY

Редактировать : только что увидел теги для SQL Server, а не MySQL, так что выше для MySQL, эквивалент SQL Server равен

myDate BETWEEN DATEADD(DAY, 1, startDate) AND DATEADD(DAY, -1, endDate)

4 голосов
/ 18 ноября 2011

Я не понимаю, почему вы должны использовать BETWEEN ... Просто myDate>startDate AND myDate<endDate сделает работу.

1 голос
/ 18 ноября 2011

Предполагая, что вы хотите включить записи, где myDate может быть любым, но не одновременно startDate и endDate, это должно работать:

Select *
From myDatabase
Where empId = 145
and myDate between startDate and endDate
and startDate <> endDate
0 голосов
/ 18 ноября 2011

BETWEEN использует >= и <=

Вам просто нужно будет использовать > и <, если вы не хотите, чтобы оно совпадало с конечными точками.

SELECT *
FROM myDatabase
WHERE empId = 145
AND myDate>startDate and myDate<startDate;
0 голосов
/ 18 ноября 2011

Вам нужно использовать что-то отличное от BETWEEN.Попробуйте вместо этого:

SELECT *
FROM myDatabase
WHERE empID = 145
AND (myDate > startDate) and (myDate < endDate)
...