2014-09-05 6 views
1

У меня есть следующие данные, установленные в тестовой таблице:Невозможно установить условие в SQL Server 2008 R2

create table test 
(
columndate date, 
columntime datetime 
) 

insert into test values('2014-01-01','22:00:00') 
insert into test values('2014-01-02','06:00:00') 
insert into test values('2014-01-03','23:00:00') 
insert into test values('2014-01-04','05:00:00') 
insert into test values('2014-02-01','10:00:00') 
insert into test values('2014-02-01','13:00:00') 
insert into test values('2014-02-01','15:00:00') 
insert into test values('2014-02-01','05:00:00')  

columndate  columntime 
------------------------------------ 
2014-01-01 1900-01-01 22:00:00.000 
2014-01-02 1900-01-01 06:00:00.000 
2014-01-03 1900-01-01 23:00:00.000 
2014-01-04 1900-01-01 05:00:00.000 
2014-02-01 1900-01-01 10:00:00.000 
2014-02-01 1900-01-01 13:00:00.000 
2014-02-01 1900-01-01 15:00:00.000 
2014-02-01 1900-01-01 05:00:00.000 

Теперь я хочу, чтобы показывать только в ночное время в результате, например:

columndate  columntime 
----------------------------------- 
2014-01-01 1900-01-01 22:00:00.000 
2014-01-02 1900-01-01 06:00:00.000 
2014-01-03 1900-01-01 23:00:00.000 
2014-01-04 1900-01-01 05:00:00.000 
2014-02-01 1900-01-01 05:00:00.000 

за что я пытаюсь следующий сценарий:

select * from test 
where columndate between '2014-01-01' and '2014-02-01' 
    and cast(columntime as time) between '06:00:00' and '23:00:00' 

Примечание: Я не буду получать отчет о времени 05:00:00

Но когда я использую следующий сценарий:

select * from test 
where columndate between '2014-01-01' and '2014-02-01' 
    and cast(columntime as time) between '05:00:00' and '23:00:00'  

Примечание: я получить ожидаемый результат, но я получаю запись времени 06:00:00 также, который я не хочу, чтобы показать.

Как это исправить?

+0

Я не понимаю ... вы хотите, только события с 23:00 до 06:00 (т.е. в одночасье)? –

+0

@JoachimIsaksson, Yup! – Meem

+0

Howcome is '2014-01-01 1900-01-01 22: 00: 00.000' в ваш желаемый результат, тогда, когда это не после 23:00? Опечатка? –

ответ

2

Вы были очень близки: вместо BETWEEN вам нужно использовать пару >= и <=, потому что вам нужно раз вне интервал:

select * from test 
where columndate between '2014-01-01' and '2014-02-01' 
    and (cast(columntime as time) <= '05:00:00' OR cast(columntime as time) >= '23:00:00') 

Demo.

+0

Yup! Это то, что я искал. Большой! Огромное спасибо. – Meem

0

Соответствует ли это ваши потребности ??:

select * from test 
where columndate between '2014-01-01' and '2014-02-01' 
    and cast(columntime as time) between '05:00:00' and '23:00:00' and columntime ! ='06:00:00' 
+0

Может быть '05: 30: 00' или' 06: 30: 00' и ​​так далее, что не соответствует моей потребности. – Meem

Смежные вопросы