Как получить из столбца даты последнюю дату предыдущего месяца? - PullRequest
0 голосов
/ 19 сентября 2019

У меня есть два столбца даты, которые учитывают только рабочие дни.A_date и E_date.E_date рассчитывается с добавлением +2 дней к A_date, потому что это запрос

Проблема в том, что если день A_date - 30-й или 31-й день месяца, то дата E_date должна быть последним днем ​​текущего месяца.а не первый или второй рабочий день следующего месяца.

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

У вас есть идеи, как ее решить?

Ответы [ 6 ]

1 голос
/ 19 сентября 2019

Я не уверен, какой у вас вопрос.До сих пор я понял, что вам нужна последняя дата месяца в случае, если при добавлении двух дней к A_Date переходам к следующему месяцу.

Почему бы вам не использовать CASE WHEN и сравнитьМесяцы, вот так:

DECLARE @A_Date date = '2019/09/30';
DECLARE @A_Date_Month int = 0;
DECLARE @E_Date_Month int = 0;

SELECT @A_Date_Month = Month(Cast(@A_Date AS datetime));
SELECT @E_Date_Month = Month(DATEADD(day, 2, @A_Date));

SELECT CASE 
        WHEN @A_Date_Month = @E_Date_Month 
        THEN DATEADD(day, 2, @A_Date) 
        ELSE EOMONTH(@A_Date) END AS OUTPUTValue

Попробуйте описанный выше набор и дайте мне знать, если он решит вашу проблему!

0 голосов
/ 19 сентября 2019

Если вы действительно хотите это только 30-го или 31-го числа любого данного месяца, а не в последние 2 дня любого месяца (поскольку, очевидно, не каждый месяц имеет 31 день) -

select A_date
   ,case when day(A_date) >= 30
       then eomonth(A_date)
       else dateadd("dd",2,A_date)
    end as E_date

Другие ответыработа в течение "последних 2 дней любого месяца".

0 голосов
/ 19 сентября 2019

имеет два столбца даты, которые учитывают только рабочие дни.A_date и E_date.E_date рассчитывается с добавлением +2 дней к A_date, потому что это запрос

Я бы просто сделал:

(case when dateadd(day, 2, a_date) < eomonth(a_date)
      then dateadd(day, 2, a_date)
      else eomonth(a_date)
 end) as e_date
0 голосов
/ 19 сентября 2019

Вы можете использовать EOMONTH () в SQLServer, чтобы получить последний день месяца.

Пример:

EOMONTH(A_date)
0 голосов
/ 19 сентября 2019
SELECT CASE WHEN dateadd(month,1+datediff(month,0,A_date),-1)< DATEADD(day, 2, A_date) THEN dateadd(month,1+datediff(month,0,A_date),-1) ELSE DATEADD(day, 2, A_date) END E_date

FOR для ввода 2019/09/30 - 2019-09-30 00: 00: 00.000

0 голосов
/ 19 сентября 2019

Как получить из столбца даты последнюю дату предыдущего месяца?

Это зависит от вашей СУБД, поэтому давайте воспользуемся возможностью сделать общий ответ:

В Oracle:

LAST_DAY(ADD_MONTHS(mydate ,-1))

В MySQL:

LAST_DAY(mydate - INTERVAL 1 MONTH)

В SQL Server:

DATEADD(MONTH, DATEDIFF(MONTH, -1, mydate )-1, -1)
-- or simply:
EOMONTH(DATEADD(Month, -1, mydate ))

В Postgres:

date_trunc('month', now())::mydate - 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...