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


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)

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)



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)

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');

2

CAST datetime Feld bis heute

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

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')

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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.