1

このサンプル データ セットが与えられた場合:

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

これらの 2 つの時間範囲のレコード数をカウントできる SQL サーバー (2005 または 2008) に日時関数はありますか? 以下は、上記のデータセットの結果です。また、それがわかるサイトがあれば教えてください。どうもありがとう、皆さん。

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

1 に答える 1

2

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],
于 2012-04-26T12:35:18.163 に答える