Инкрементальные даты следующего месяца в SQL - PullRequest
0 голосов
/ 12 февраля 2019

У меня аналогичное требование, у меня есть подача файла в SQL Server 2012 в течение месяца, но я хотел преобразовать тот же файл, что и файл следующего месяца.

Например, у меня есть ниже

02/22/2018 02/23/2018 02/24/2018

и я хочу 03/22/2018 03/23/2018 02/24/2018

Я могу подняться до этой точки, но сталкиваюсь с проблемой, когда у меня ситуация ниже.

02/28/2018 02/24/2018

и я хочу 03/31/2018 03/31/2018

У меня есть нормальный календарь, который я могу использовать. Может кто-нибудь помочь, пожалуйста.

Ответы [ 2 ]

0 голосов
/ 12 февраля 2019

Я думаю, вы ищете функцию EOMONTH

что-то вроде этого может помочь вам решить вашу проблему

DECLARE @date VARCHAR(10) = '02/28/2019'

SELECT CASE WHEN (EOMONTH(@date) = FORMAT(CAST(@date AS DATETIME),'yyyy-MM-dd')) 
                  THEN EOMONTH(DATEADD(month,1,@date))
            ELSE  DATEADD(month,1,@date)
       END

Примечание: Я использовал функцию форматирования, потому что EOMONTHвозвращает дату в формате 'гггг-мм-дд'

ОБНОВЛЕНИЕ

DECLARE @dates TABLE
(
  FromDate DATETIME, 
  ToDate DATETIME
)

INSERT INTO @dates (FromDate)
VALUES('12/31/2017'),('1/31/2018'),('2/28/2018'),('3/31/2018')



select * from @dates

UPDATE @dates 
SET ToDate =CASE WHEN (EOMONTH(FromDate) = FORMAT(CAST(FromDate AS DATETIME),'yyyy-MM-dd')) 
                  THEN EOMONTH(DATEADD(month,1,FromDate))
            ELSE  DATEADD(month,1,FromDate)
       END

       SELECT * FROM @dates

Запустите это, и вы увидите окончательный вывод

0 голосов
/ 12 февраля 2019

вы можете использовать функцию DATEADD () для этого, как показано ниже:

SELECT DATEADD(month, 1, '02/22/2018') AS DateAdd;
...