xpertzgurtej Ответов: 1

Как получить данные между 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

Мой запрос не решается, когда я тестирую с разными случаями

1 Ответов

Рейтинг:
1

OriginalGriff

И так оно и есть:

Id	EmployeeId	LeaveFromDate	LeaveToDate
1	101	2018-01-03	2018-01-05
2	101	2018-01-07	2018-01-14
3	101	2018-01-15	2018-01-15
4	101	2018-01-18	2018-01-25
5	102	2018-01-04	2018-01-07
6	102	2018-01-11	2018-01-16
7	102	2018-01-18	2018-01-20

Id	EmployeeId	LeaveFromDate	LeaveToDate
1	101	2018-01-03	2018-01-05
Так в чем же проблема?