sql >> Database >  >> RDS >> Sqlserver

SQL Hoe te bepalen of datum maand datum 29,30 of 31 bevat

Na het toevoegen van een maand, vergelijk DAG. Indien minder omdat DATEADD in plaats daarvan naar het einde van de maand gaat (bijv. 31 januari tot 28 februari), ga dan naar de volgende maand

De DATEADD/DATEDIFF hier springt naar het begin van de volgende maand

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

Bewerken:hoef alleen maar een extra dag toe te voegen in plaats van een of andere fancy DATEADD/DATEDIFF...



  1. Query-optimalisatie in PostgreSQL. UITLEG Basisprincipes - Deel 2

  2. Hoe gebruik ik een op PHP/MySQL gebaseerd script om IP-blokkades van een website te verbannen?

  3. MySQL en Java-tijd vergelijken

  4. Postgresql-functie retourneert geen tabel bij selecteren