J'écris une requête dans laquelle je dois obtenir les données pour la dernière année seulement. Quelle est la meilleure façon de procéder ?
SELECT ... FROM ... WHERE date > '8/27/2007 12:00:00 AM'
J'écris une requête dans laquelle je dois obtenir les données pour la dernière année seulement. Quelle est la meilleure façon de procéder ?
SELECT ... FROM ... WHERE date > '8/27/2007 12:00:00 AM'
Cela vous renvoie un nombre, pas une date, vous ne pourriez pas ensuite le comparer à une date, sans calculer également l'année de cette date. Vous obtiendriez alors des résultats incorrects pour le 31 décembre 2014 et le 1er janvier 2015, qui se situent dans des années différentes, mais pas à une année d'écart...
Correct. J'avais besoin de comparer les années par numéro d'année, donc de 2013 à 2014 par exemple, car les données entrantes ne comportaient que l'année. Je n'ai pas été clair dans mon commentaire. Je vous remercie.
J'ai trouvé cette page en cherchant une solution qui me permettrait de sélectionner les résultats d'une année civile antérieure. La plupart des résultats affichés ci-dessus semblent renvoyer des éléments des 365 derniers jours, ce qui ne me convenait pas.
En même temps, il m'a donné suffisamment d'indications pour répondre à mes besoins dans le code suivant - que je publie ici pour tous ceux qui ont le même besoin que moi et qui pourraient tomber sur cette page en cherchant une solution.
SELECT .... FROM .... WHERE year(*your date column*) = year(DATEADD(year,-1,getdate()))
Merci aux personnes ci-dessus dont les solutions m'ont permis d'arriver à ce dont j'avais besoin.
Le plus lisible, IMO :
SELECT * FROM TABLE WHERE Date >
DATEADD(yy, -1, CONVERT(datetime, CONVERT(varchar, GETDATE(), 101)))
Lequel :
Il existe des variantes avec DATEDIFF et DATEADD pour obtenir le minuit d'aujourd'hui, mais elles ont tendance à être plutôt obtuses (bien qu'elles soient légèrement meilleures en termes de performances - ce que vous ne remarquerez pas par rapport aux lectures nécessaires pour récupérer les données).
GETDATE()
renvoie la date actuelle et le temps .
Si l'année dernière commence à minuit du jour actuel de l'année dernière (comme dans l'exemple original), vous devez utiliser quelque chose comme.. :
DECLARE @start datetime
SET @start = dbo.getdatewithouttime(DATEADD(year, -1, GETDATE())) -- cut time (hours, minutes, ect.) -- getdatewithouttime() function doesn't exist in MS SQL -- you have to write one
SELECT column1, column2, ..., columnN FROM table WHERE date >= @start
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.