Comment puis-je regrouper par colonne date-heure sans prendre en compte le temps


221

J'ai plusieurs commandes de produits et j'essaie de regrouper par date et de additionner la quantité pour cette date. Comment regrouper par mois / jour / année sans prendre en compte la partie temps?

3/8/2010 7:42:00 doit être groupé avec 3/8/2010 4:15:00


2
Voir aussi groupe
Michael Freidgeim

Réponses:


374

Cast / Convertissez les valeurs en un Datetype pour votre groupe par.

GROUP BY CAST(myDateTime AS DATE)

3
savez-vous comment je ferais la même chose avec LINQ to SQL?
The Muffin Man

1
@ Nick - pas sûr. Essayez d'utiliser DateTime.Date.
Odé

3
- Linq à Sql: DateTime.Date- Entity Framework:EntityFunctions.TruncateTime(myDateTime)
The Muffin Man

1
Je suis d'accord, je répondais à The Muffin Man qui posait des questions à ce sujet dans un contexte ORM.
Niels Brinch

4
Merci beaucoup ... cela a résolu mon problème. ajouté «group by CAST (date_modified AS DATE)». n'oubliez pas d'ajouter le même (CAST (date_modified AS DATE)) dans la cluase sélectionnée.
Mohammed mansoor

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

Ou dans SQL Server 2008 , vous pouvez simplement caster Date comme @Oded l'a suggéré:

GROUP BY CAST(orderDate AS DATE)



2

Voici un exemple que j'ai utilisé lorsque j'ai eu besoin de compter le nombre d'enregistrements pour une date particulière sans la partie heure:

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
L'ORDRE PAR ne fonctionnera pas comme supposé car il ne le traitera pas comme une date, il sera donc trié par jour
Weapon X

2

Voici l'exemple fonctionne bien dans Oracle

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

2

Champ datetime CAST à ce jour

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

0

Je pense que vous devez vous regrouper en ce jour du mois de l'année. alors pourquoi ne pas utiliser les fonctions TRUNK_DATE. Son fonctionnement est décrit ci-dessous:

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

date_trunc est pour PostgreSQL pas SQL Server qui passe par les balises, l'OP cherchait une solution pour SQL server.
Dave Hogan
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.