powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / add_months
5 сообщений из 5, страница 1 из 1
add_months
    #39373974
rybingleb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Коллеги, только сейчас обратил внимание на особенность работы функции add_months, что если прибавить три месяца сразу или три раза по одному месяцу, то получатся разные результат:
Код: sql
1.
2.
3.
4.
select
   add_months(to_date('29.01.2017', 'dd.mm.yyyy'), 3)
  ,add_months(add_months(add_months(to_date('29.01.2017', 'dd.mm.yyyy'), 1), 1), 1)
from dual;



Даже не знаю, какой вопрос... Это во всех версиях так? Это нормально, не считается багом?
И как все-таки "правильнее" прибавлять три месяца? (по вашему мнению, не беря в расчет бизнес-логику конкретного приложения)?
...
Рейтинг: 0 / 0
add_months
    #39373984
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это, как обычно, стоит просто внимательней прочесть доку https://docs.oracle.com/cd/E11882_01/server.112/e41084/functions011.htm#SQLRF00603 If date is the last day of the month or if the resulting month has fewer days than the day component of date , then the result is the last day of the resulting month. Otherwise, the result has the same day component as date .
...
Рейтинг: 0 / 0
add_months
    #39373992
Фотография orawish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rybingleb,

это нормально.
если вдуматься и/или вчитаться в описание, то понятно что иначе и не может быть
...
Рейтинг: 0 / 0
add_months
    #39374021
rybingleb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
То есть получается, что функция сначала вычисляет результирующий месяц, а потом вычисляет день.
Я же, когда пытался считал в уме, прибавлял один месяц по правилам функции, потом еще один к результату, потом еще один, и получал результат, как во втором варианте )

Код: plsql
1.
2.
select add_months(add_months(add_months(to_date('29.01.2017', 'dd.mm.yyyy'), 1), 1), 1)
from dual;
...
Рейтинг: 0 / 0
add_months
    #39375096
Фотография orawish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rybinglebТо есть получается, что функция сначала вычисляет результирующий месяц, а потом вычисляет день.
Я же, когда пытался считал в уме, прибавлял один месяц по правилам функции, потом еще один к результату, потом еще один, и получал результат, как во втором варианте )

Код: plsql
1.
2.
select add_months(add_months(add_months(to_date('29.01.2017', 'dd.mm.yyyy'), 1), 1), 1)
from dual;


не так.
просто у функции есть входные параметры и есть выходной (= результат)
и здесь нет нужды додумывать реализацию её потрохов
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / add_months
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]