Как проверить действительное время даты из таблицы Sql

Я хочу проверить, находится ли мой текущий DateTime между двумя DateTime или нет.

У меня первый раз 2016-05-19 04:23:00.000 и второй раз 2016-05-19 04:50:00.000.

Как написать запрос для возврата true, если текущий DateTime находится между первым и вторым временем, иначе возвращается false?


person Jani Mani    schedule 20.05.2016    source источник
comment
Есть только несколько сотен или около того примеров, если вы погуглите. Вот сообщение SO с решением... stackoverflow.com/questions/11745650/   -  person dinotom    schedule 20.05.2016


Ответы (3)


Базовое выражение case может сделать это довольно легко.

case when FirstTime <= getdate() AND getdate() <= SecondDate 
    then 'True' 
    else 'False' 
end
person Sean Lange    schedule 20.05.2016

Прекратите использование между с датой и временем, если вы не АБСОЛЮТНО УВЕРЕНЫ, что знаете, что делаете, и АБСОЛЮТНО ПОНИМАЕТЕ концепцию даты и времени.

create table #test(
    Id int not null identity(1,1) primary key clustered,
    ActionDate datetime not null
)

insert into #test values
( '2015-12-31 23:59:59.99' ),
( '2016-01-01' ),
( '2016-01-10' ),
( '2016-01-31 23:59:59.99' ),
( '2016-02-01' )

select * from #test
-- all the rows
1   2015-12-31 23:59:59.990
2   2016-01-01 00:00:00.000
3   2016-01-10 00:00:00.000
4   2016-01-31 23:59:59.990
5   2016-02-01 00:00:00.000


-- lets locate all of January

-- using between
select * from #test
where
    ( ActionDate between '2016-01-01' and '2016-01-31' )

2   2016-01-01 00:00:00.000
3   2016-01-10 00:00:00.000
-- missing row 4

select * from #test
where
    ( ActionDate between '2016-01-01' and '2016-02-01' )

2   2016-01-01 00:00:00.000
3   2016-01-10 00:00:00.000
4   2016-01-31 23:59:59.990
5   2016-02-01 00:00:00.000 -- this is not January

-- using < and >
select * from #test
where
    ( '2016-01-01' <= ActionDate )
    and ( ActionDate < '2016-02-01' )

2   2016-01-01 00:00:00.000
3   2016-01-10 00:00:00.000
4   2016-01-31 23:59:59.990


drop table #test 
person shadow    schedule 21.05.2016

person    schedule
comment
что, если у меня есть время «2016-05-19 04:23:00.000», хранящееся в таблице? как я попаду сюда на этот раз? - person Jani Mani; 20.05.2016
comment
@JaniMani Смотрите мое редактирование и мои комментарии к вашему принятому ответу. Избегайте использования Between с DateTimes. - person shadow; 21.05.2016