27 du mois dernier:
DATEADD(month,DATEDIFF(month,'20110201',CURRENT_TIMESTAMP),'20110127')
26 ce mois-ci:
DATEADD(month,DATEDIFF(month,'20110101',CURRENT_TIMESTAMP),'20110126')
Plutôt que d'essayer de définir la partie de temps à la dernière moment possible le 26, il serait préférable d'utiliser une comparaison moins que <
, plutôt que <=
ou between
. Ensuite, vous avez juste besoin le 27 de ce mois:
DATEADD(month,DATEDIFF(month,'20110101',CURRENT_TIMESTAMP),'20110127')
Si vous voulez quelque chose basé sur une « date de base » particulière (plutôt que « ce mois »), puis remplacer cette valeur date à laquelle j'utilise CURRENT_TIMESTAMP
. Vous laissez toujours les littéraux de date (par exemple, '20110101'
) tels qu'ils sont.
Tous les calculs ci-dessus fonctionnent de la même manière - le DATEDIFF interne calcule le nombre de transitions de mois qui se sont produits depuis une date arbitraire; nous ajoutons ensuite ce même nombre de transitions mensuelles à une seconde date - pas tout à fait aussi arbitraire - qui présente le «décalage» final que nous voulons atteindre (par exemple, dans la première, la «date arbitraire» est le 1er février 2011). la date est le 27 janvier 2011 - le 27 du mois précédent).
Quel RDBMS utilisez-vous? MySQL, Sql Server, etc? – cdeszaq
En outre, si vous acceptez les réponses à certaines des questions que vous avez posées, vous obtiendrez peut-être une meilleure réponse aux questions à venir. – cdeszaq
Sql Server 2008 – faiz