時間を考慮せずに日時列でグループ化するにはどうすればよいですか


221

製品の注文がたくさんあり、日付でグループ化し、その日付の数量を合計しようとしています。時間の部分を考慮せずに月/日/年でグループ化するにはどうすればよいですか?

3/8/2010 7:42:00 とグループ化する必要があります 3/8/2010 4:15:00


回答:


374

値をDateグループのタイプにキャスト/変換します。

GROUP BY CAST(myDateTime AS DATE)

3
LINQ to SQLで同じようにする方法を知っていますか。
マフィンマン

1
@ニック-わからない。を使用してみてくださいDateTime.Date
オデット

3
-Linq to Sql:DateTime.Date-エンティティフレームワーク:EntityFunctions.TruncateTime(myDateTime)
マフィンマン

1
私は同意します、私はORMの文脈でそれについて尋ねていたマフィンマンに応答していました。
Niels Brinch 2015

4
どうもありがとう...それは私の問題を解決しました。「CAST(date_modified AS DATE)by group」を追加しました。select cluaseに同じ(CAST(date_modified AS DATE))を追加することを忘れないでください。
Mohammed mansoor

25
GROUP BY DATEADD(day, DATEDIFF(day, 0, MyDateTimeColumn), 0)

または、SQL Server 2008以降ではDate 、@ Odedが提案するように単純にキャストできます 。

GROUP BY CAST(orderDate AS DATE)

16

SQL 2008より前の日付部分を削除すると、次のようになります。

GROUP BY CONVERT(CHAR(8),DateTimeColumn,10)

2
変換関数と日時タイプ(char(8)と10の意味)の説明については、w3schools.com
sql /


2

以下は、時間部分なしで特定の日付のレコード数をカウントする必要があるときに使用した例です。

select count(convert(CHAR(10), dtcreatedate, 103) ),convert(char(10), dtcreatedate, 103)
FROM dbo.tbltobecounted
GROUP BY CONVERT(CHAR(10),dtcreatedate,103)
ORDER BY CONVERT(CHAR(10),dtcreatedate,103)

1
ORDER BYは日付として処理されないため、想定どおりに機能しないため、日ごとにソートされます
武器X

2

これがオラクルでうまく機能する例です

select to_char(columnname, 'DD/MON/yyyy'), count(*) from table_name group by to_char(createddate, 'DD/MON/yyyy');

2

CAST日時フィールドの日付

select  CAST(datetime_field as DATE), count(*) as count from table group by CAST(datetime_field as DATE);

0

私はあなたがその年の月のその日にグループ化する必要があると信じています。では、なぜTRUNK_DATE関数を使用しないのか。仕組みは次のとおりです。

Group By DATE_TRUNC('day' , 'occurred_at_time')

date_truncは、SQL ServerではなくPostgreSQL用であり、タグを使用するため、OPはSQL Serverのソリューションを探していました。
Dave Hogan
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.