Функция Oracle NUMTODSINTERVAL и интервальная функция - PullRequest
0 голосов
/ 05 февраля 2019

Может кто-нибудь объяснить, что делает нижеприведенное?

and effective_DATE < (TRUNC(CURRENT_DATE) - NUMTODSINTERVAL(EXTRACT(DAY FROM TRUNC( CURRENT_DATE)), 'DAY' ) + INTERVAL '1' DAY) 

У меня нет доступа к базе данных, поэтому я не могу запустить ее самостоятельно для тестирования.

Что я понимаю, так эточто NUMTODSINTERVAL преобразует число в литерал INTERVAL DAY TO SECOND.

Так что, если бы я выполнил этот запрос сегодня, он проверил бы, не является ли дата вступления в силу меньше 5 февраля 2019 года - 5 дней, преобразованные всекунд плюс 1 день?

Итак, 5 февраля - 000000005 + 1 = 6 февраля?

Это правильно или я смотрю на это неправильно?Кроме того, почему разработчики используют этот метод?

1 Ответ

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

Второй аргумент NUMTODSINTERVAL указывает единицу измерения.«ИНТЕРВАЛЬНЫЙ ДЕНЬ ВТОРОЙ» - вводящее в заблуждение название - оно просто означает абстрактный интервал времени, в данном случае 5 дней.

EXTRACT(DAY FROM TRUNC( CURRENT_DATE)) находит текущий день месяца (5 сегодня) NUMTODSINTERVAL(5, 'DAY') создаетИНТЕРВАЛ +5 дней

Итак, сегодня говорится: возьмите 5 февраля, вычтите 5 дней (что = 31 января), затем добавьте один день (1 февраля).

Кажется,пытаться найти первый день месяца, который был бы намного проще, как:

 and effective_DATE < TRUNC(CURRENT_DATE, 'MM')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...