0

Я хочу проверить либо текущую дату DateTime между двумя DateTimes, либо нет.Как проверить действительное время даты из таблицы Sql

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

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

+7

Есть только несколько сотен примеров, если вы это сделаете. Вот сообщение SO с решением ... http: //stackoverflow.com/questions/11745650/isdate-function-in-sql-evaluates-invalid-dates-as-valid – dinotom

ответ

0
Select * 
From Table 
Where 
    ('2016-05-19 04:23:00.000' <= dateColumn) 
    And (dateColumn < '2016-05-19 04:50:00.000') 
+0

Что делать, если у меня есть время '' 2016- 05-19 04: 23: 00.000 '' хранится в таблице? как я сейчас получу здесь? –

+0

@JaniMani См. Мои изменения и мои комментарии к принятому вами ответу. Избегайте использования 'Between' с' DateTimes'. – shadow

1

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

case when FirstTime <= getdate() AND getdate() <= SecondDate 
    then 'True' 
    else 'False' 
end 
0

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

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