Count AM и PM в SQL

учитывая этот образец данных:

Date_Time 10/1/2011 12:05:00 AM 10/6/2011 2:25:00 AM 10/3/2011 5:59:00 AM 10/19/2011 6:01:00 PM 11/5/2011 8:30:00 PM 11/30/2011 11:59:00 PM 

Есть ли функция времени на сервере SQL (2005 или 2008), которая может подсчитывать количество записей в этих двух временных диапазонах? Ниже приведен результат из приведенного выше набора данных. Пожалуйста, дайте мне знать, если сайт, который показывает это также. Большое спасибо, ребята.

 Midnight-6:00am 6:00pm – Midnight. 3 3 

Обратите внимание: вы хотите, чтобы второй диапазон увеличивался до 23:59, а не в полночь … Используйте DATEPART() чтобы получить только часовую часть дат и использовать совокупный SUM() чтобы добавить 1 к общей сумме для каждого диапазона, когда это выполняется. Итак, вам нужны часы между 0 и 5 (00:00 – 05:59) и 18 и 23 (18:00 – 23:59)

 SELECT SUM(CASE WHEN DATEPART(hour, Date_Time) BETWEEN 0 AND 5 THEN 1 ELSE 0 END) AS [Midnight to 6:00am], SUM(CASE WHEN DATEPART(hour, Date_Time) BETWEEN 18 AND 23 THEN 1 ELSE 0 END) AS [6:00pm to 11:59pm] FROM your_table 

Обновить

Вышеприведенное считается до 05:59:59. Если это действительно должно подсчитываться до 06:00:00, вам также необходимо проверить отдельные временные части на 6:00. Это может быть медленным.

 SELECT SUM(CASE WHEN DATEPART(hour, Date_Time) BETWEEN 0 AND 5 -- Look for 06:00:00 by stripping off the date portion and comparing against a character string OR (DATEPART(hour, Date_Time) = 6 AND DATEPART(minute, Date_Time) = 0 AND DATEPART(second, Date_Time) = 0) THEN 1 ELSE 0 END ) AS [Midnight to 6:00am], SUM(CASE WHEN DATEPART(hour, Date_Time) BETWEEN 18 AND 23 THEN 1 ELSE 0 END) AS [6:00pm to 11:59pm] FROM your_table 

Альтернативно, это может быть быстрее использовать

  SUM(CASE WHEN DATEPART(hour, Date_Time) BETWEEN 0 AND 5 -- Look for 06:00:00 also OR CONVERT(VARCHAR, Date_Time, 108) = '06:00:00' THEN 1 ELSE 0 END ) AS [Midnight to 6:00am], 
Давайте будем гением компьютера.