?

Log in

No account? Create an account

Забавная арифметика дат в Оракле - Joyfolk

янв. 29, 2008

03:20 pm - Забавная арифметика дат в Оракле

Previous Entry Поделиться Next Entry

Попробуйте, например, угадать, что вернет вот такой запрос:
select add_months(to_date('2007-09-29', 'RRRR-MM-DD'), 3) from dual;
А такой?
select add_months(to_date('2007-09-30', 'RRRR-MM-DD'), 3) from dual;

Comments:

[User Picture]
From:telfia
Date:Январь 29, 2008 01:12 pm
(Link)
Интересно. Никогда не задумывалась о таком хитром моменте. :)
(Ответить) (Thread)
[User Picture]
From:joyfolk
Date:Январь 29, 2008 01:14 pm
(Link)
вот и я тоже не задумывался
а сейчас долго искал почему у меня в отчет лишние числа лезут
(Ответить) (Parent) (Thread)
(Удалённый комментарий)
[User Picture]
From:joyfolk
Date:Январь 29, 2008 01:23 pm
(Link)
Вообще-то это только один из возможных вариантов. И далеко не самый очевидный. И сделано так (ты кстати понял как?) немного по другим причинам. Переменную длину месяца add_months естесно не может не учитывать.
(Ответить) (Parent) (Thread)
[User Picture]
From:telfia
Date:Январь 29, 2008 01:32 pm
(Link)
Понятно, что здесь выбрана стратегия последний день месяца переводить в последний день месяца (если исходный месяц 30 дней, а получаемый 31 день, то получаем 31-е число). Но так теряется половина 30-х чисел. Для меня было бы очевиднее обрезать дату до 30-го, если 31-го нет.
(Ответить) (Parent) (Thread)