Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

SQL Come determinare se la data del mese della data contiene 29,30 o 31

Dopo aver aggiunto un mese, confronta GIORNO. Se è inferiore perché DATEADD va invece alla fine del mese (ad es. dal 31 gennaio al 28 febbraio), passa al mese successivo

Il DATEADD/DATEDIFF qui salta all'inizio del mese successivo

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

Modifica:ho solo bisogno di aggiungere un giorno in più invece di qualche fantasioso DATAADD/DATEDIFF...