Wie kann ich nach Datum und Uhrzeitspalte gruppieren, ohne die Zeit zu berücksichtigen?

221

Ich habe eine Reihe von Produktbestellungen und versuche, nach Datum zu gruppieren und die Menge für dieses Datum zu summieren. Wie kann ich nach Monat / Tag / Jahr gruppieren, ohne den Zeitanteil zu berücksichtigen?

3/8/2010 7:42:00 sollte mit gruppiert werden 3/8/2010 4:15:00

Der Muffin-Mann
quelle
2
Siehe auch ähnliche Gruppe pro Stunde
Michael Freidgeim

Antworten:

374

Umwandlung / Konvertierung der Werte in einen DateTyp für Ihre Gruppe von.

GROUP BY CAST(myDateTime AS DATE)
Oded
quelle
3
Wissen Sie, wie ich dasselbe mit LINQ to SQL machen würde?
Der Muffin-Mann
1
@ Nick - nicht sicher. Versuchen Sie es mit DateTime.Date.
Oded
3
- Linq zu SQL: DateTime.Date- Entity Framework:EntityFunctions.TruncateTime(myDateTime)
The Muffin Man
1
Ich stimme zu, ich habe auf The Muffin Man geantwortet, der in einem ORM-Kontext danach gefragt hat.
Niels Brinch
4
Vielen Dank ... es hat mein Problem gelöst. 'Gruppe nach CAST (date_modified AS DATE)' hinzugefügt. Vergessen Sie nicht, dasselbe (CAST (date_modified AS DATE)) in select cluase hinzuzufügen.
Mohammed Mansoor
25
GROUP BY DATEADD(day, DATEDIFF(day, 0, MyDateTimeColumn), 0)

Oder in SQL Server 2008 ab können Sie einfach zu gieße Date als @Oded vorgeschlagen:

GROUP BY CAST(orderDate AS DATE)
Mitch Wheat
quelle
16

In vor Sql 2008 Durch Herausnehmen des Datumsteils:

GROUP BY CONVERT(CHAR(8),DateTimeColumn,10)
Kamyar
quelle
2
Erläuterungen zur Konvertierungsfunktion und zum Datum / Uhrzeit-Typ (Bedeutung von char (8) und 10) finden Sie unter w3schools.com/sql/func_convert.asp
super1ha1
7

GROUP BY DATE(date_time_column)

Aravindh Gopi
quelle
2

Hier ist ein Beispiel, das ich verwendet habe, als ich die Anzahl der Datensätze für ein bestimmtes Datum ohne Zeitanteil zählen musste:

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)
user3169774
quelle
1
Der ORDER BY funktioniert nicht wie angenommen, da er nicht als Datum behandelt wird, sodass er nach Tag sortiert wird
Waffe X
2

Hier ist das Beispiel funktioniert gut in Orakel

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

CAST datetime Feld bis heute

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

Ich glaube, Sie müssen sich an diesem Tag des Monats des Jahres gruppieren. Warum also nicht TRUNK_DATE-Funktionen verwenden? Die Funktionsweise wird nachfolgend beschrieben:

Group By DATE_TRUNC('day' , 'occurred_at_time')
Alireza
quelle
date_trunc ist für PostgreSQL und nicht für SQL Server. Aufgrund der Tags suchte das OP nach einer Lösung für SQL Server.
Dave Hogan