Первый понедельник прошлого месяца - PullRequest
0 голосов
/ 29 апреля 2020

Мне нужно получить дату первого понедельника предыдущего месяца для запроса Oracle.

ms SQL равно

select dateadd (day, (9 - datepart(dw, eomonth(getdate(), -2)))%7, eomonth(getdate(), -2))

, но нет dateadd функция в Oracle.

Ответы [ 2 ]

1 голос
/ 29 апреля 2020

Здесь вы go:

SQL> alter session set nls_date_language = 'english';

Session altered.

SQL> alter session set nls_date_Format = 'dd.mm.yyyy day';

Session altered.

SQL>
SQL> select next_day(add_months(trunc(sysdate, 'mm'), -1), 'monday') first_monday
  2  from dual;

FIRST_MONDAY
--------------------
02.03.2020 monday

SQL>

Что он делает?

  • урезать сегодняшнюю дату (SYSDATE) до 1-го числа месяца ('mm')
  • вычитать 1 месяц (add_months)
  • использовать функцию next_day вместе с параметром 'monday'
0 голосов
/ 29 апреля 2020

Вы можете использовать:

TRUNC(TRUNC(add_months(dt, -1), 'mm') + 6, 'iw')

Это вычитает месяц из указанной даты, усекает его до 1-го числа месяца, затем добавляет к нему 6 дней, прежде чем окончательно урезать его до начала iso. неделя (которая всегда является понедельником).

Вам нужно добавить 6 к первому числу месяца, чтобы соответствующий понедельник считался первым понедельником месяца (в противном случае вы можете выбрать последний понедельник). за предыдущий месяц.

Вы можете видеть, как он работает [здесь [(https://dbfiddle.uk/?rdbms=oracle_18&fiddle=c25bc32b3223b954e8fcb02b9b76ffd5)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...