Convertir la date / l'heure à ce jour

J'ai une requête qui s'exécute et je voudrais returnner les loggings où la date est supérieure ou égale à une date particulière. La colonne sur laquelle j'interroge est le format datetime.

SELECT COUNT(RSO_ParentID), AssignedDateTime FROM Task WHERE OwnerTeam='2nd Line Support' AND AssignedDateTime>='2015-09-01 00:00:00.000' GROUP BY AssignedDateTime 

Y a-t-il un moyen d'avoir un filtrage sur la partie date de AssignedDateTime, et une search par rapport à la date actuelle (c'est-à-dire la search des 7 derniers jours)?

Merci, Matt

Vous pourriez le faire comme ça dans MSSQL

 SELECT COUNT(RSO_ParentID), AssignedDateTime FROM Task WHERE OwnerTeam='2nd Line Support' AND AssignedDateTime>=DATEADD(D,-7, GETDATE()) GROUP BY AssignedDateTime 

Remarque: Cette question n'a pas été étiquetée SQL Server 2005 lorsque je lui ai répondu. Je laisse la réponse, car il est approprié pour SQL Server 2008+.

Si vous vous souciez uniquement de la date et non de l'heure, vous avez besoin d'une combinaison de casting et de datediff() :

 SELECT COUNT(RSO_ParentID), AssignedDateTime FROM Task WHERE OwnerTeam = '2nd Line Support' AND AssignedDateTime >= dateadiff(day, -7, cast(getdate() as date)) GROUP BY AssignedDateTime; 

Notez que vous pouvez également exprimer cela en utilisant des fonctions sur AssignedDateTime . C'est généralement une mauvaise idée car cela empêche souvent l'utilisation d'index pour la requête.

Je devine aussi que vous voulez les résultats par jour:

 SELECT COUNT(RSO_ParentID), cast(AssignedDateTime as date) FROM Task WHERE OwnerTeam = '2nd Line Support' AND AssignedDateTime >= dateadiff(day, -7, cast(getdate() as date)) GROUP BY cast(AssignedDateTime as date); 

ou un total, dans lequel vous ne voulez pas une clause group by :

 SELECT COUNT(RSO_ParentID) FROM Task WHERE OwnerTeam = '2nd Line Support' AND AssignedDateTime >= dateadiff(day, -7, cast(getdate() as date)); 

Si vous utilisez MSSQL, utilisez DATEDIFF.

 SELECT COUNT(RSO_ParentID), AssignedDateTime FROM Task WHERE OwnerTeam='2nd Line Support' AND DATEDIFF(DAY,AssignedDateTime,GETDATE()) <=7 GROUP BY AssignedDateTime 

Essayez ceci, il va vérifier seulement la partie date, mais pas la partie time

 SELECT COUNT(RSO_ParentID), AssignedDateTime FROM Task WHERE OwnerTeam='2nd Line Support' AND CAST(AssignedDateTime AS DATE) >= DATEADD(D,-7, GETDATE()) GROUP BY AssignedDateTime