Проверка того, соответствует ли заданная дата между диапазоном дат - программирование
Подтвердить что ты не робот

Проверка того, соответствует ли заданная дата между диапазоном дат

Если у меня есть 2 столбца даты в таблице, startDate и endDate. Как вернуть строки, где заданная дата совпадает между этими двумя датами? Например:

Если заданная дата 2012-10-25

Он должен возвращать следующие строки

startDate   -   endDate
2012-10-25  -   2012-10-25
2011-09-10  -   2013-11-15
2012-10-20  -   2012-10-25
2012-10-23  -   2012-10-28
2012-09-14  -   2012-10-28

из следующих строк:

startDate   -   endDate
2012-10-25  -   2012-10-25
2011-09-10  -   2013-11-15
2012-01-11  -   2012-10-11
2012-10-20  -   2012-10-25
2012-04-15  -   2012-04-16
2012-05-20  -   2012-05-25
2012-12-01  -   2012-12-10
2012-10-23  -   2012-10-28
2012-09-14  -   2012-10-28
2012-11-13  -   2012-12-15

Возможно ли это с помощью sql?

Я использую SQL Server 2008.

4b9b3361

Ответ 1

С SQL Server это на самом деле так же просто, как:

SELECT startDate, endDate
FROM YourTable
WHERE '2012-10-25' between startDate and endDate

Ответ 2

Отметьте BETWEEN ключевое слово.

Синтаксис прост:

SELECT col1, col2
FROM table1
WHERE date_col BETWEEN '2012-10-25' and 2012-10-28

Ответ 3

для других лапшингах может быть интересно:

Select * from sted where [dbo].[F_LappingDays](Startdate,EndDate,'20121025','20121025')=1


CREATE Function [dbo].[F_LappingDays](@Von1 datetime,@bis1 Datetime,@von2 Datetime,@bis2 Datetime) Returns int as
/*
20110531 Thomas Wassermann
Terminüberschneidungen finden
*/
begin
Declare @Result int

Select @Result  = 0
if (@Von1>[email protected]) and (@bis1<[email protected])
    begin
        Select @Result=Cast(@Bis1 - @von1 + 1 as Int)
    end

else if (@Von1<[email protected]) and (@bis1 > @Von2) and (@bis1<[email protected])
    begin
        Select @Result=Cast(@Bis1 - @von2 + 1 as Int)
    end

else if (@Von1>[email protected]) and (@von1<[email protected]) and (@bis1>@Bis2)
    begin
        Select @Result=Cast(@Bis2 - @von1 + 1 as Int)
    end

else if (@Von1<@Von2) and (@bis1>@Bis2)
    begin
        Select @Result=Cast(@Bis2 - @von2 + 1 as Int)
    end



Return @Result
end