sql >> Databasteknik >  >> RDS >> Sqlserver

SQL Hur man avgör om datum månad datum innehåller 29,30 eller 31

När du har lagt till en månad, jämför DAY. Om mindre eftersom DATEADD går till slutet av månaden istället (t.ex. 31 januari till 28 februari), hoppa till nästa månad

DATEADD/DATEDIFF här hoppar till början av följande månad

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:behöver bara lägga till en extra dag istället för några tjusiga DATEADD/DATEDIFF...



  1. Postgres-kolumnen finns inte

  2. JS Kan inte fråga MySQL-databasen. FEL:connection.query är inte en funktion

  3. PHP PDO uppdaterar inte tabell och producerar inga fel

  4. vänster gå samman multiplicera värden