У меня есть 2 даты @StartDate и @EndDate, у меня есть таблица, в которой я сохранил даты смен, структура конкретных сотрудников определена ниже следующим образом.

EmpCode   ShiftCode  StartDate    EndDate
1         24         2019-10-01   2019-10-12
1         26         2019-10-13   2019-10-20

Если я предоставлю @startDate = '2019-10-01' и @endDate = '2019-10-15' Он не должен получать следующие данные. Я хочу исключить строки, в которых даты находятся между указанными датами.

Если предоставленные параметры, скажем, равны '2019-10-21' и '2019-10-31' соответственно, тогда он должен предоставить мне код сотрудника, поскольку его смена не определена в эти даты, и я могу добавить его.

Это то, что я пробовал до сих пор, но он не возвращает желаемого результата.

SELECT 
    EmpCode 
FROM 
    TABLE
WHERE 
    [Roster].[EndDate] NOT BETWEEN @startDate AND @endDate OR 
    [Roster].[EndDate] NOT BETWEEN @startDate AND @endDate
1
Doonie Darkoo 16 Окт 2019 в 09:55
Предоставьте следующую информацию: какой тип данных - это столбцы StartDate и EndDate? Какой результат вы получите с вашим запросом?
 – 
Michael Tobisch
16 Окт 2019 в 10:02
Даты: datetime, и я получаю EmpCode 1, который не должен возвращаться, потому что его сдвиг уже существует в указанных датах
 – 
Doonie Darkoo
16 Окт 2019 в 10:06
Ваш код не будет работать в приведенном вами примере. Вы ищете дату окончания между '2019-10-01' и '2019-10-15', поэтому вы всегда получите вторую строку обратно, поскольку дата окончания не указана в этом диапазон дат?
 – 
Tom
16 Окт 2019 в 10:15

2 ответа

Поскольку Шикар удалил свой пост, простым решением было бы ...

...
WHERE
    @startDate NOT BETWEEN [Roster].[StartDate] AND [Roster].[EndDate] AND 
    @endDate NOT BETWEEN [Roster].[StartDate] AND [Roster].[EndDate]
2
Paul 16 Окт 2019 в 10:32

Вы можете добиться этого, изменив положение «НЕ». Также у вас была ошибка копирования и вставки в предложении where.

SELECT 
    EmpCode 
FROM 
    TABLE
WHERE 
   NOT (
       [Roster].[StartDate] BETWEEN @startDate AND @endDate AND 
       [Roster].[EndDate] BETWEEN @startDate AND @endDate
   )
2
boyukbas 16 Окт 2019 в 10:33