Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

SQL Как да определите дали датата на месеца съдържа 29, 30 или 31

След като добавите месец, сравнете ДЕН. Ако е по-малко, защото DATEADD отива към края на месеца вместо това (напр. 31 януари до 28 февруари), тогава прескочете до следващия месец

DATEADD/DATEDIFF тук прескача до началото на следващия месец

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

Редактиране:трябва само да добавите допълнителен ден, а не някакво фантастично 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. Свързване към отдалечен SQL Server 2008 от Windows Azure

  2. Как да проверя съществуването на дефиниран от потребителя тип таблица в SQL Server 2008?

  3. Групирайте данните по реда на промяна на стойността на колоната за групиране

  4. Грешка в заявката с двусмислено име на колона в SQL

  5. как да получа данни за текущата седмица само в SQL сървър?