2013-03-19 4 views
0

Как подсчитать количество записей после 6 часов ночи и 6 утра?Запрос времени SQL с 6 вечера ночью до 6 часов

Работает до 12:00.

SELECT distinct count(barcode) c 
FROM table1 
where DAY(timestamp) = DAY(GETDATE()) 
    AND MONTH(timestamp) = MONTH(GETDATE()) 
    AND YEAR(timestamp) = YEAR(GETDATE()) 
    AND datepart(hh,timestamp) >= 18 
    AND datepart(hh,timestamp) >= 6; 
+1

Какую версию SQL Server, пожалуйста? –

+0

версия SQL sever 2008 – nadG

+0

Вы имеете в виду между? – Jodrell

ответ

4

Я думаю, что это может быть все, что вы ищете. Он удаляет любые секунды из вызова GETDATE() и добавляет к нему соответствующее количество часов.

SELECT COUNT(barcode) 
FROM table1 
WHERE timestamp >= DATEADD(HOUR,18,CONVERT(VARCHAR(10), GETDATE(),110)) 
    AND timestamp <= DATEADD(HOUR,6,CONVERT(VARCHAR(10), GETDATE()+1,110)) 

SQL Fiddle Demo

0

Как насчет этого?

, где datefunction (метка времени)> = GETDATE() - 1 и (DatePart (чч, метка времени)> = 18 или DatePart (чч, метка времени) < = 6)

где datefunction обращенные datetime на сегодняшний день

+1

Под «где datefunction конвертирует дату и время» вы имели в виду «CONVERT (DATE, [timestamp])'? Кроме того, ваше предложение 'OR' неверно сформировано - без правильных круглых скобок это не будет включать ВСЕ строки до 6 AM для ВСЕЙ даты? –

1

Если вы пытаетесь подсчитать день ото дня, но начать день в 18:00 а не в полночь, просто добавить смещение времени:

select cast(timestamp + 0.25 as date) as theday, count(barcode) 
from table1 
group by cast(timestamp + 0.25 as date) 
order by theday desc; 

Если вы хотите сделать счетчик для 6p.m. - 6 м.д. в течение нескольких дней:

select cast(timestamp + 0.25 as date) as theday, count(barcode) 
from table1 
where datepart(hh, timestamp) in (18, 19, 20, 21, 22, 23, 0, 1, 2, 3, 4, 5) 
group by cast(timestamp + 0.25 as date) 
order by theday desc; 

За самый последний день, вы могли бы сделать:

select top 1 cast(timestamp + 0.25 as date) as theday, count(barcode) 
from table1 
where datepart(hh, timestamp) in (18, 19, 20, 21, 22, 23, 0, 1, 2, 3, 4, 5) 
group by cast(timestamp + 0.25 as date) 
order by theday desc; 
+1

http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/06/bad-habits-to-kick-order-by-ordinal.aspx –

+1

@AaronBertrand. , , Я ценю это. Тем не менее, мне понадобится много времени, чтобы избавиться от привычки. –

+0

Прохладный, пока вы принимаете предложения. :-) http://sqlblog.com/blogs/aaron_bertrand/archive/2012/12/21/16567.aspx –

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