Plus précisément MSSQL 2005.Comment calculer le dernier jour du mois en SQL?
Répondre
est ici une solution qui vous donne la dernière seconde du mois en cours. Vous pouvez extraire la partie date ou la modifier pour revenir juste le jour. Je l'ai testé cela sur SQL Server 2005.
select dateadd(s, -1, dateadd(mm, datediff(m, 0, getdate()) + 1, 0));
Pour comprendre comment cela fonctionne, nous devons examiner les fonctions dateadd() et datediff().
DATEADD(datepart, number, date)
DATEDIFF(datepart, startdate, enddate)
Si vous exécutez simplement l'appel le plus intérieur à datediff(), vous obtenez le nombre de mois en cours depuis l'horodatage 0.
select datediff(m, 0, getdate());
1327
La partie suivante ajoute que nombre de mois plus 1 à 0 Horodatage, vous indiquant le point de départ du mois calendaire suivant.
select dateadd(mm, datediff(m, 0, getdate()) + 1, 0);
2010-09-01 00:00:00.000
Enfin, le dateadd extérieur() soustrait juste une seconde de l'horodatage début du mois prochain, vous donnant la dernière seconde du mois en cours.
select dateadd(s, -1, dateadd(mm, datediff(m, 0, getdate()) + 1, 0));
2010-08-31 23:59:59.000
Cette ancienne réponse (ci-dessous) a un bug où il ne fonctionne pas le dernier jour d'un mois qui a plus de jours que le mois suivant. Je le laisse ici comme un avertissement aux autres.
Ajoutez un mois à la date actuelle, puis soustrayez la valeur renvoyée par la fonction DAY appliquée à la date actuelle à l'aide des fonctions DAY et DATEADD.
dateadd(day, -day(getdate()), dateadd(month, 1, getdate()))
Que faire si les deux appels getdate donnent des réponses à des dates différentes? –
Je suppose que c'est possible. Vous devez déclarer une variable pour tenir la date d'aujourd'hui au préalable. –
Ils ne le feront pas. Nous créons des rapports qui génèrent des colonnes year, quarter, month et rundate (GetDate()) qui prennent 30 secondes et la valeur ne change jamais. – JeffO
Quelques liens vers des réponses possibles:
Essayez ceci:
DATEADD (DAY, -1, DATEADD (MONTH, DATEDIFF (MONTH, 0, CURRENT_TIMESTAMP) + 1, 0)
J'ai souvent constaté que les gens ne suivaient pas la logique de ceci. Donc, même si cela semble correct (où la réponse acceptée semble être incorrecte), je ne vais pas donner +1. Avez-vous une chance de modifier la réponse pour donner l'explication? – MatBailie
DECLARE
@Now datetime,
@Today datetime,
@ThisMonth datetime,
@NextMonth datetime,
@LastDayThisMonth datetime
SET @Now = getdate()
SET @Today = DateAdd(dd, DateDiff(dd, 0, @Now), 0)
SET @ThisMonth = DateAdd(mm, DateDiff(mm, 0, @Now), 0)
SET @NextMonth = DateAdd(mm, 1, @ThisMonth)
SET @LastDayThisMonth = DateAdd(dd, -1, @NextMonth)
Parfois, vous avez vraiment besoin le dernier jour de ce mois-ci, mais souvent ce que vous voulez vraiment est de décrire l'intervalle de temps de ce mois-ci. Ceci est la meilleure façon de décrire l'intervalle de temps de ce mois-ci:
WHERE @ThisMonth <= someDate and someDate < @NextMonth
SELECT DATEADD(M, DATEDIFF(M, '1990-01-01T00:00:00.000', CURRENT_TIMESTAMP), '1990-01-31T00:00:00.000')
Explication:
Approche générale: utiliser la fonctionnalité temporelle.
SELECT '1990-01-01T00:00:00.000', '1990-01-31T00:00:00.000'
Ce sont littéraux DATETIME, le premier granule de temps le premier jour et le dernier jour, respectivement du même mois de 31 jours. Le mois choisi est entièrement arbitraire.
SELECT DATEDIFF(M, '1990-01-01T00:00:00.000', CURRENT_TIMESTAMP)
C'est la différence en mois entiers entre le premier jour du mois de référence et l'horodatage actuel. Appelons cela @calc
.
SELECT DATEADD(M, @calc, '1990-01-31T00:00:00.000')
Cela ajoute des granules @calc
mois au dernier jour du mois de référence, dont le résultat est l'horodatage actuel « arrondi » au dernier jour de son mois. Q.E. D.
+1 pour inclus une explication :) – MatBailie
Pour être complet, Oracle vous feriez quelque chose comme ...
select add_months(trunc(sysdate,'MM'),1) ...
ou
select last_day(sysdate)+1 ...
DATEADD(dd, -1, DATEADD(mm, +1, DATEADD(dd, 1 - DATEPART(dd, @myDate), @myDate)))
Ils sont les principaux points si vous pouvez obtenir du courant premier jour mois, dernier jour du dernier mois et dernier jour du mois en cours.
Ci-dessous est l'étape par étape pour écrire requête:
Date SQL Server démarre à partir 1901/01/01 (date 0) et jusqu'à présent chaque mois peut être identifié par un numéro. Le mois 12 est le premier mois de 1902 signifie janvier. Le mois 1200 est janvier 2001. De même, chaque jour peut être assigné par un numéro unique, par exemple la date 0 est 1901/01/01. Date 31 est 01.02.1901 en Janvier 1901 commence à 0.
Pour en savoir premier jour du mois courant (date du jour ou une date donnée)
- D'abord, nous devons vérifier combien de mois Je suis passé depuis la date 0 (1901/01/01). SELECT DATEDIFF (MM, 0, GETDATE())
- Ajouter même nombre de mois à ce jour 0 (1901/01/01)
SELECT DATEADD (MM, DATEDIFF (MM, 0, GETDATE()), 0)
Ensuite, nous allons arriver le premier jour du mois en cours (date du jour ou une date donnée)
pour obtenir la dernière journée du mois dernier
Nous devons soustraire une seconde de la première journée du mois en cours
SELECT DATEADD (SS, -1, DATEADD (MM, DATEDIFF (MM, 0, GETDATE()), 0))
pour obtenir la dernière journée du mois courant
Pour premier jour du mois en cours d'abord, nous avons vérifié combien de mois ont été écoulés depuis la date 0 (1901/01/01).Si nous ajoutons un autre mois avec le nombre total de mois depuis la date 0, puis ajoutons le nombre total de mois avec la date 0, nous obtiendrons le premier jour du mois suivant. Si nous obtenons le premier jour du mois suivant, alors pour obtenir le dernier jour du mois en cours, tout ce dont nous avons besoin pour soustraire une seconde.
SELECT DATEADD (SS, -1, DATEADD (MM, DATEDIFF (MM, 0, GETDATE()) + 1,0))
espoir qui aiderait.
En utilisant SQL2005, vous n'avez pas accès à une fonction utile EOMONTH()
, vous devez calculer vous-même.
Cette volonté simple fonction fonctionne comme EOMONTH
CREATE FUNCTION dbo.endofmonth(@date DATETIME= NULL)
RETURNS DATETIME
BEGIN
RETURN DATEADD(DD, -1, DATEADD(MM, +1, DATEADD(DD, 1 - DATEPART(DD, ISNULL(@date,GETDATE())), ISNULL(@date,GETDATE()))))
END
Requête pour effectuer:
SELECT dbo.endofmonth(DEFAULT) --Current month-end date
SELECT dbo.endofmonth('02/25/2012') --User-defined month-end date
- 1. Calculer le dernier jour du trimestre COURANT
- 2. Calculer en SQL le premier jour ouvrable d'un mois donné
- 3. Comment calculer le dernier jour ouvrable du mois à Korn Shell?
- 4. C# .Net Obtenir le dernier jour du mois précédent à partir de la date du jour
- 5. fonction pour déterminer premier jour d'un mois, le dernier jour d'un mois, etc.
- 6. Comment puis-je planifier un rapport dans SharePoint pour s'exécuter le dernier jour du mois?
- 7. Recevez le dernier vendredi du mois en Java
- 8. Obtenir les dates du premier et du dernier jour du mois précédent en C#
- 9. Comment calculer le nombre de mois entre deux DateTimes?
- 10. ActionScript - comment obtenir le jour maximum du mois en cours
- 11. Comment créer une fonction permettant de déterminer les dates du dernier jour du mois précédent?
- 12. Comment réparer les erreurs du dernier jour du mois avec ce code php?
- 13. le mois dernier dans VBA Excel
- 14. Comment String.Format le jour du mois dans C#?
- 15. comment calculer compter en sql?
- 16. Fonction Excel pour déterminer le dernier vendredi d'un mois
- 17. Groovy/Grails classe date - obtenir le jour du mois
- 18. mois Peuplement et jour
- 19. SQL: Comment produire la date suivante donnée mois et jour
- 20. Comment obtenir le nom du mois en C#?
- 21. Pour calculer jours dans un mois
- 22. Comment déterminer si une table a été consultée au cours du dernier mois?
- 23. comment calculer le diamètre du réseau
- 24. Mise à jour automatique des graphiques Excel chaque mois avec de nouvelles données et roulement du dernier mois de la fin
- 25. SharePoint View pour afficher automatiquement uniquement le mois en cours?
- 26. Comment obtenir la même heure et le jour le mois prochain en utilisant DateTime dans C#
- 27. SQL - calculer le pourcentage d'augmentation des valeurs d'une colonne numérique
- 28. Conversion au jour le jour en php
- 29. Possibilité de "réinitialiser" le mois/jour/année surligné par UIDatePicker?
- 30. UIDatePicker afficher uniquement le mois et le jour
Je ne suis pas sûr que la réponse que vous avez marqué comme accepté fonctionne acutally . Exécutez '2009 Jan 30' à travers et voir ce que ça donne? – MatBailie
Bonjour? Le travail de la réponse acceptée ... – MatBailie
Dems, j'utilisé cette source d'inspiration pour la solution que je mis en œuvre, mais qui est presque il y a un an, donc je ne me souviens pas exactement ce que je faisais ... –