Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

SQL Jak ustalić, czy data miesiąc data zawiera 29,30 lub 31

Po dodaniu miesiąca porównaj DAY. Jeśli mniej, ponieważ DATEADD idzie do końca miesiąca (np. 31 stycznia do 28 lutego), przejdź do następnego miesiąca

Pole DATEADD/DATEDIFF przeskakuje na początek następnego miesiąca

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

Edytuj:wystarczy dodać dodatkowy dzień, a nie kilka fantazyjnych DATEADD/DATEDIFF...



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Spłaszczenie tabeli z 1 wierszem na tabelę par klucz-wartość

  2. W SQL Server, jak mogę znaleźć wszędzie, gdzie występuje odwołanie do kolumny?

  3. Kolumny daty w SQL-Server (MSSQL-JDBC 3.0) działające w środowisku Java 1.7.0 pobrane jako 2 dni w przeszłości

  4. SQL Grant wykonuje się na wielu obiektach

  5. SQL Server:łączenie wielu wierszy w jeden wiersz