Чтобы найти конкретную дату после определенной даты в SQL оракула. - PullRequest
4 голосов
/ 28 июля 2011

Чтобы найти определенную дату после определенной даты в Oracle oracle.

Пример: Дата присоединения сотрудника = 17 декабря 1980 года.

И я хочу получить Дата и Деньи время начала самого первого 1 февраля после указанной даты присоединения.

Ответы [ 3 ]

3 голосов
/ 28 июля 2011

Один из вариантов будет

add_months( trunc( add_months(<<your date>>,-1),'YYYY'), 13 )

, т.е.

SQL> ed
Wrote file afiedt.buf

  1  select add_months( trunc( add_months( date '1980-02-17', -1 ), 'YYYY'), 13
)
  2*   from dual
SQL> /

ADD_MONTH
---------
01-FEB-81

SQL> ed
Wrote file afiedt.buf

  1  select add_months( trunc( add_months( date '1980-01-17', -1 ), 'YYYY'), 13
)
  2*   from dual
SQL> /

ADD_MONTH
---------
01-FEB-80

SQL> ed
Wrote file afiedt.buf

  1  select add_months( trunc( add_months( date '1980-12-17', -1 ), 'YYYY'), 13
)
  2*   from dual
SQL> /

ADD_MONTH
---------
01-FEB-81
0 голосов
/ 17 марта 2016

Я делаю это немного по-другому, но мне это кажется немного понятнее, чем метод add_months:

SELECT
    employee_join_date
  , CASE
        WHEN extract(MONTH FROM employee_join_date) >= 2
            THEN to_date(extract (YEAR FROM employee_join_date)+1 || '0201', 'yyyymmdd')
        ELSE to_date(extract (YEAR FROM employee_join_date) || '0201', 'yyyymmdd')
    END AS following_feb_1
FROM
    YOUR_TABLE;

Обратите внимание, что если сотрудник был принят на работу 1 февраля, он вернется 1 февраля следующего года. Если вы не хотите этого, просто используйте «> 2» вместо «> = 2».

0 голосов
/ 28 июля 2011

Вы можете попробовать:

select add_months(trunc( date '1980-12-17' - 32, 'YEAR') + 31, 12)
from dual

В этом запросе 32 - это номер дня в году 1 февраля. Он может быть адаптирован для других дат в январе и феврале, но не для целидаты позже в этом году из-за неровностей високосного года.

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