Comment puis-je calculer le dernier jour du mois en SQL?
Spécifiquement MSSQL 2005.
- Je ne suis pas sûr de la réponse que vous avez marquées comme acceptées acutally œuvres. Exécuter 2009 Jan 30' à travers elle et de voir ce que ça donne?
- Bonjour? La accepté de répondre -ne - travail...
- Dems, j'ai utilisé cela comme source d'inspiration pour la solution que j'ai mis en œuvre, cependant, c'est près d'un an donc je ne me souviens pas précisément ce que j'ai fait...
- Wow, juste remarqué que le "2008". Je n'ai AUCUNE idée de comment j'ai trouvé cette question à moins qu'ai DONC un peu tordu dans l'ordre de la liste de la "nouvelle" des questions?
- Vous avez raison, mon vieux solution avait un bug. Je l'ai mis à jour pour une meilleure solution qui n'ont pas le même défaut.
Vous devez vous connecter pour publier un commentaire.
Voici une solution qui vous donne la dernière seconde du mois en cours. Vous pouvez extraire la partie de date ou de le modifier pour revenir le jour. J'ai testé cela sur SQL Server 2005.
À comprendre comment il fonctionne, nous devons nous pencher sur la dateadd() et datediff() fonctions.
Si vous exécutez simplement le plus à l'intérieur d'appel à datediff(), vous obtenez le mois en cours depuis timestamp 0.
La prochaine partie ajoute que nombre de mois plus de 1 à 0 timestamp, vous donnant le point de départ du mois calendaire suivant.
Enfin, à l'extérieur dateadd() juste soustrait une seconde après le début d'horodatage du mois prochain, vous donnant la dernière seconde du mois en cours.
Cette vieille réponse (ci-dessous) a un bug où il ne fonctionne pas sur le dernier jour d'un mois, qui a plus de jours que le mois prochain. Je pars ici comme un avertissement pour les autres.
Ajouter un mois à la date du jour, puis soustraire la valeur retournée par la fonction JOUR appliqué à la date actuelle, en utilisant les fonctions JOUR et DATEADD.
Explication:
Approche générale: utilisation temporelle de la fonctionnalité.
Ce sont des littéraux DATETIME, étant la première fois granulaires sur le premier jour et le dernier jour du même mois de 31 jours. Quel mois est choisi est entièrement arbitraire.
C'est la différence en mois entiers entre le premier jour du mois de référence et le timestamp actuel. Appelons cette
@calc
.Cela ajoute
@calc
mois de granules pour le dernier jour du mois de référence, dont le résultat est le timestamp actuel "arrondie" pour le dernier jour du mois. Q. E. D.Essayez ceci:
Les éléments-clés sont si vous pouvez obtenir le premier jour du mois en cours,le Dernier Jour du Mois Dernier et le Dernier Jour du Mois en cours.
Ci-dessous, étape par Étape la façon d'écrire la requête:
En Date SQL Server Démarre à partir de 1901/01/01( Jour 0) et jusqu'à maintenant, chaque mois peut être identifié par un numéro. Mois 12 premiers mois de 1902 signifie janvier. Mois 1200 est janvier de l'année 2001. De la même façon chaque jour peut être affecté par le numéro unique de l'e.g Date 0 est 1901/01/01. Date 31 est 1901/02/01 mois de janvier de 1901 commence à partir de 0.
Pour trouver le Premier jour du Mois en cours(Date du jour ou une date donnée)
SELECT DATEDIFF(MM,0,GETDATE())
Puis nous aurons premier jour du mois en cours(Date du jour ou une date donnée)
Pour obtenir le Dernier Jour du Mois Dernier
Nous avons besoin de soustraire un second à partir du premier jour du mois en cours
Pour obtenir le Dernier Jour du Mois en cours
D'arriver le premier jour du mois en cours, nous avons d'abord vérifié combien de mois ont passé depuis la date 0(1901/01/01). Si nous ajoutons un autre mois, le nombre total de mois depuis la date 0, puis ajouter le total des mois à la date 0, nous aurons premier jour du mois suivant.
Si nous obtenons premier jour du mois suivant alors de tirer le dernier jour du mois en cours, tous nous avons besoin de soustraire une seconde.
Espoir qui pourrait l'aider.
À l'aide de SQL2005, vous n'avez pas accès à une fonction utile
EOMONTH()
, de Sorte que vous devez calculer vous-même.Requête à effectuer:
Quelques liens vers des réponses possibles:
http://www.extremeexperts.com/sql/Tips/DateTrick.aspx
http://www.devx.com/tips/Tip/14405
http://blog.sqlauthority.com/2007/08/18/sql-server-find-last-day-of-any-month-current-previous-next/
http://www.sqlservercurry.com/2008/03/find-last-day-of-month-in-sql-server.html
Parfois vous avez besoin de la dernière journée de ce mois, mais souvent ce que vous voulez vraiment est de décrire les intervalle de temps de ce mois. C'est la meilleure façon de décrire la intervalle de temps de ce mois:
Pour l'exhaustivité, l'Oracle vous feriez quelque chose comme ...
ou