Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

SQL Comment déterminer si date mois date contient 29,30 ou 31

Après avoir ajouté un mois, comparez JOUR. Si moins parce que DATEADD va à la fin du mois à la place (par exemple, du 31 janvier au 28 février), passez au mois suivant

Le DATEADD/DATEDIFF saute ici au début du mois suivant

declare @StartEffectiveDate datetime
set @StartEffectiveDate = '2011-01-20'
SELECT
    CASE
        WHEN DAY(@StartEffectiveDate) <= DAY(DATEADD (MONTH, 1, @StartEffectiveDate)) THEN DATEADD (MONTH, 1, @StartEffectiveDate)
        ELSE DATEADD(day, 1, DATEADD (MONTH, 1, @StartEffectiveDate))
    END

set @StartEffectiveDate = '2011-01-31'
SELECT
    CASE
        WHEN DAY(@StartEffectiveDate) <= DAY(DATEADD (MONTH, 1, @StartEffectiveDate)) THEN DATEADD (MONTH, 1, @StartEffectiveDate)
        ELSE DATEADD(day, 1, DATEADD (MONTH, 1, @StartEffectiveDate))
    END

set @StartEffectiveDate = '2011-02-28'
SELECT
    CASE
        WHEN DAY(@StartEffectiveDate) <= DAY(DATEADD (MONTH, 1, @StartEffectiveDate)) THEN DATEADD (MONTH, 1, @StartEffectiveDate)
        ELSE DATEADD(day, 1, DATEADD (MONTH, 1, @StartEffectiveDate))
    END

Edit :il suffit d'ajouter un jour supplémentaire plutôt que des DATEADD/DATEDIFF fantaisistes...