Функции Dateadd и Datediff в Oracle - PullRequest
       2

Функции Dateadd и Datediff в Oracle

0 голосов
/ 25 апреля 2018

Я хочу использовать Oracle, но функции DATEDIFF и DATEADD не работают в БД Oracle.

Как написать нижеприведенный код в Oracle?

datediff('QUARTER', pr.StartDate, SYSDATE)

datediff('MONTH', pr.StartDate, SYSDATE)

Ответы [ 2 ]

0 голосов
/ 25 апреля 2018

Они не имеют простых точных эквивалентов из-за семантики datediff().Он подсчитывает количество «границ» между двумя датами / временем.

Я считаю, что они семантически эквивалентны:

trunc(months_between(trunc(pr.StartDate, 'Q'), trunc(sysdate, 'Q')) / 3)
months_between(trunc(pr.StartDate, 'MONTH'), trunc(sysdate, 'MONTH'))

Из-за усечения до первого дня квартала / месяца,они не должны возвращать дроби.

0 голосов
/ 25 апреля 2018

Лучше всего в этом случае использовать функцию Oracle MONTHS_BETWEEN().

Вместо:

datediff('QUARTER', pr.StartDate, SYSDATE)

вы должны использовать:

MONTHS_BETWEEN(pr.startdate, SYSDATE) / 3

и вместо:

datediff('MONTH', pr.StartDate, SYSDATE)

вы бы использовали:

MONTHS_BETWEEN(pr.startdate, SYSDATE)

Имейте в виду, что MONTHS_BETWEEN() будет возвращать доли месяцев, поэтому используйте TRUNC() или ROUND(), есливам нужно целое число.

Конечно, если вам нужны дни вместо месяцев, вы можете просто вычесть одну дату из другой, например, SYSDATE - pr.startdate или наоборот.

Если выНужно добавить дни к дате, вы можете просто к этому:

pr.startdate + 1 -- where 1 is the number of days

А если вам нужно добавить или вычесть месяцы, используйте функцию ADD_MONTHS() - в отличие от INTERVAL s, эта функция безопасна дляиспользовать в високосные годы.

Надеюсь, это поможет.

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