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

SQL Sådan bestemmes om dato måned dato indeholder 29, 30 eller 31

Når du har tilføjet en måned, skal du sammenligne DAY. Hvis mindre fordi DATEADD går til slutningen af ​​måneden i stedet (f.eks. 31. januar til 28. februar), så spring til næste måned

DATEADD/DATEDIFF springer her til starten af ​​den følgende måned

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 kun at tilføje en ekstra dag i stedet for nogle fancy DATEADD/DATEDIFF...



  1. udefineret metode, mens du bruger form_for i Ny controller-metode

  2. Django &Postgres - percentil (median) og grupper efter

  3. MySQL:hvordan fjerner man alle enkelttegn fra en streng?

  4. MySQL - Hvordan får man en liste over værdier i tabel A, der ikke findes i tabel B?