Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

SQL So bestimmen Sie, ob Datum, Monat, Datum 29,30 oder 31 enthält

Nachdem Sie einen Monat hinzugefügt haben, vergleichen Sie DAY. Wenn weniger, weil DATEADD stattdessen bis zum Ende des Monats geht (z. B. 31. Januar bis 28. Februar), dann zum nächsten Monat springen

Das DATEADD/DATEDIFF springt hier zum Beginn des Folgemonats

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

Bearbeiten:Es muss nur ein zusätzlicher Tag hinzugefügt werden, anstatt ein ausgefallenes DATEADD / DATEDIFF ...