2 番目の範囲を真夜中ではなく、午後 11 時 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:59amまでカウントされます。これが実際に 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],