Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Странное поведение Interval или может я где ошибся?  [new]
Myxa_beer
Member

Откуда:
Сообщений: 59
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production

Select Add_Months(to_timestamp('03/31/2008','mm/dd/yyyy'),1)
From dual;

NEW_DATE
04/30/2008



Select to_timestamp('03/31/2008','mm/dd/yyyy') + Interval '1' Month
From dual;

ORA-08139 date not valid for month specified


Вполне ожидаемо в обоих случаях к 31 марта 2008 года пытаюсь добавить 1 месяц. Через функцию все нормально. Вопрос, почему не нормально через добавления интервала? Если добавить 1 месяц к 30 марта 2008 года, то и с интервалом все нормально.
Может я чего-то не понимаю?
6 июн 13, 15:38    [14400497]     Ответить | Цитировать Сообщить модератору
 Re: Странное поведение Interval или может я где ошибся?  [new]
123йй
Member

Откуда:
Сообщений: 1639
Myxa_beer,
"бугалтерский" и "физичекий" месяц. stff
6 июн 13, 15:43    [14400541]     Ответить | Цитировать Сообщить модератору
 Re: Странное поведение Interval или может я где ошибся?  [new]
Да ну
Guest
Myxa_beer,

Согласно документации

• When interval calculations return a datetime value, the result must be an actual datetime value or the database returns an error
6 июн 13, 15:47    [14400570]     Ответить | Цитировать Сообщить модератору
 Re: Странное поведение Interval или может я где ошибся?  [new]
Myxa_beer
Member

Откуда:
Сообщений: 59
Всем спасибо. Сейчас почитаю.
6 июн 13, 15:51    [14400587]     Ответить | Цитировать Сообщить модератору
 Re: Странное поведение Interval или может я где ошибся?  [new]
stax..
Guest
Да ну
Myxa_beer,

Согласно документации

• When interval calculations return a datetime value, the result must be an actual datetime value or the database returns an error

імхо, так не должно быть, накосячили с интервалом и оправдываются

если добавляем месяц, должно отрабатывать как адд_монтс, с учетом высокосного, столетий и тд

меняем пример из доки
  1* SELECT TO_DATE('29-02-2004', 'DD-MM-YYYY') + TO_YMINTERVAL('4-0') FROM DUAL
SQL> /

TO_DATE('2
----------
29.02.2008

SQL> ed
Wrote file afiedt.buf

  1* SELECT TO_DATE('29-02-2004', 'DD-MM-YYYY') + TO_YMINTERVAL('3-0') FROM DUAL
SQL> /
SELECT TO_DATE('29-02-2004', 'DD-MM-YYYY') + TO_YMINTERVAL('3-0') FROM DUAL
                                           *
ERROR at line 1:
ORA-01839: date not valid for month specified


посмотрим шо будет в 12-ке

.....
stax
6 июн 13, 17:49    [14401486]     Ответить | Цитировать Сообщить модератору
 Re: Странное поведение Interval или может я где ошибся?  [new]
-2-
Member

Откуда:
Сообщений: 15330
stax..
імхо, так не должно быть, накосячили с интервалом и оправдываются
это лишь следование стандартам sql92
6 июн 13, 17:59    [14401531]     Ответить | Цитировать Сообщить модератору
 Re: Странное поведение Interval или может я где ошибся?  [new]
xtender
Member

Откуда: Мск
Сообщений: 5704
Вроде пишут так и должно быть согласно ANSI-стандарта:
205-206 страницы - http://www.inf.fu-berlin.de/lehre/SS05/19517-V/FolienEtc/sql-foundation-aug94.pdf
6 июн 13, 18:04    [14401569]     Ответить | Цитировать Сообщить модератору
 Re: Странное поведение Interval или может я где ошибся?  [new]
stax..
Guest
-2-
xtender
Вроде пишут так и должно быть согласно ANSI-стандарта:
205-206 страницы - http://www.inf.fu-berlin.de/lehre/SS05/19517-V/FolienEtc/sql-foundation-aug94.pdf

спасибо за ссылку
мож и по стандарту
но лично мне кажется нелогичным слет, я к "дате" хочу прибавить три года
(через три года закончится срок договора), имхо должно отрабатывать как с go_month,
другой вопрос согласен ли я с алгоритмом (подходит ли), но ORA ето черезчур


SELECT TO_DATE('29-02-2004', 'DD-MM-YYYY') + TO_YMINTERVAL('3-0') FROM DUAL
*
ERROR at line 1:
ORA-01839: date not valid for month specified

.....
stax
6 июн 13, 18:51    [14401781]     Ответить | Цитировать Сообщить модератору
 Re: Странное поведение Interval или может я где ошибся?  [new]
-2-
Member

Откуда:
Сообщений: 15330
stax..,

меня больше напрягает, что trunc не работает с timestamp и interval, с маской в to_char(interval) туго. и прочие мелочи.
6 июн 13, 19:57    [14401960]     Ответить | Цитировать Сообщить модератору
 Re: Странное поведение Interval или может я где ошибся?  [new]
stax..
Guest
-2-,
чесно, я с интервалом никогда не работал
помню был ошарашен что не сработало
SQL> desc t
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 V                                                  VARCHAR2(4000)

SQL> insert into t values (lpad('1',4001,'s'))
  2  /

1 row created.

SQL>


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

ps
возобновили доступ до металинка, пока в интерфейсе разобратся немогу

.....
stax
6 июн 13, 21:11    [14402231]     Ответить | Цитировать Сообщить модератору
 Re: Странное поведение Interval или может я где ошибся?  [new]
andreymx
Member

Откуда: Запорожье
Сообщений: 54398
Томас наш Кайт этот прикол с интервалом описывал в одной из последних книг
7 июн 13, 00:14    [14403046]     Ответить | Цитировать Сообщить модератору
 Re: Странное поведение Interval или может я где ошибся?  [new]
Вадиман
Member

Откуда: Владивосток
Сообщений: 1072
вот здесь было подобное обсуждение
7 июн 13, 01:02    [14403170]     Ответить | Цитировать Сообщить модератору
 Re: Странное поведение Interval или может я где ошибся?  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
Вадиман
вот здесь было подобное обсуждение

вообще, баян этот давно рваный.
арифметика дат в секундах-днях и месяцах-годах несопостовима.
поэтому и интервалов два типа и между собой они неаддитивны.
7 июн 13, 02:05    [14403287]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить