Как получить данные между fromdate и todate
DECLARE @tb TABLE (Id INT IDENTITY(1,1), EmployeeId INT, LeaveFromDate DATE, LeaveToDate DATE) INSERT INTO @tb VALUES (101,'2018-01-03','2018-01-05') INSERT INTO @tb VALUES (101,'2018-01-07','2018-01-14') INSERT INTO @tb VALUES (101,'2018-01-15','2018-01-15') INSERT INTO @tb VALUES (101,'2018-01-18','2018-01-25') INSERT INTO @tb VALUES (102,'2018-01-04','2018-01-07') INSERT INTO @tb VALUES (102,'2018-01-11','2018-01-16') INSERT INTO @tb VALUES (102,'2018-01-18','2018-01-20') SELECT * FROM @tb DECLARE @StartDate DATE,@EndDate DATE,@EmployeeId INT; SET @StartDate='2018-01-04'; SET @EndDate='2018-01-05'; SET @EmployeeId=101; SELECT * FROM @tb WHERE EmployeeId=@EmployeeId AND ((LeaveFromDate BETWEEN @StartDate AND @EndDate) OR (LeaveToDate BETWEEN @StartDate AND @EndDate))
Он показывает правильный результат;
Но в следующем случае это не возвращает результат.
SET @StartDate='2018-01-04'; SET @EndDate='2018-01-04'; SET @EmployeeId=101; SELECT * FROM @tb WHERE EmployeeId=@EmployeeId AND ((LeaveFromDate BETWEEN @StartDate AND @EndDate) OR (LeaveToDate BETWEEN @StartDate AND @EndDate))
Он должен отображать самую первую запись с id=101, потому что "2018-01-04" находится между "2018-01-03" и "2018-01-05".
Как это сделать? Пожалуйста помочь
Что я уже пробовал:
SELECT * FROM @tb WHERE EmployeeId=@EmployeeId AND ((LeaveFromDate BETWEEN @StartDate AND @EndDate) OR (LeaveToDate BETWEEN @StartDate AND @EndDate))
Richard MacCutchan
Хранить даты в виде строк-не очень хорошая идея.
xpertzgurtej
Даты не хранятся в виде строки..Он хранится как дата. одинарные кавычки используются для вставки даты в столбец datetime
xpertzgurtej
Мой запрос не решается, когда я тестирую с разными случаями