sql >> Databáze >  >> RDS >> Sqlserver

SQL Jak zjistit, zda datum a měsíc datum obsahuje 29, 30 nebo 31

Po přidání měsíce porovnejte DAY. Pokud méně, protože DATEADD místo toho přejde na konec měsíce (např. 31. ledna až 28. února), přejděte na další měsíc

DATEADD/DATEDIFF zde přeskočí na začátek následujícího měsíce

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:stačí přidat den navíc, než nějaké luxusní DATEADD/DATEDIFF...



  1. ORA-00604:došlo k chybě na úrovni rekurzivního SQL 1

  2. importovat soubory csv na numerické typy postgres

  3. Výsledky SQL skupiny podle měsíce

  4. Analýza tnsnames.ora pomocí regulárního výrazu