(495) 925-0049, ITShop интернет-магазин 229-0436, Учебный Центр 925-0049
  Главная страница Карта сайта Контакты
Поиск
Вход
Регистрация
Рассылки сайта
 
 
 
 
 

Расчет разницы между датами

Источник: oraclemaniacs

Наткнулся сегодня на заметку на Oracle Tips & Tricks со схожим названием. В заметке рассматривается забавный нюанс работы с типом Date в СУБД Oracle. Рассмотрим этот нюанс, так сказать, на русском.

Банальность.
Как многие помнят, большинство сред хранит дату как разницу между этой самой датой и некой опорной датой, в виде числа. Таким образом 01.04.2008-3.111 будет представляться пользователю, конечно, как 28.03.2008 21:20:10, однако храниться дата будет с большей точностью. Т.е. при выполнении действия 01.04.2008-3.111-01.04.2008 мы получим -3.111.

Особенности.
При работе в СУБД Oracle необходимо отметить такие нюансы:

  1. Числовые типы данных хранятся в десятичном формате.
  2. Точности большей чем до секунд добиться при использовании типа DATE в СУБД Oracle невозможно.

Вернемся к примеру, описанному выше.

Пример.

SQL> select to_date('01.04.2008')-3.111 from dual;

TO_DATE('01.04.2008')-3.111
---------------------------
28.03.2008 21:20:10

SQL> select to_date('01.04.2008')-3.111-to_date('01.04.2008') from dual;

TO_DATE('01.04.2008')-3.111-TO
------------------------------
          -3,11099537037037

Проблема? Нет, особенность!
Рассмотрим 3.111 в виде дельты между датами. Что мы получим?
3.111*24*60*60 = 3 дня 2 часа 39 минут 50.4 секунды
При преобразовании к дате мы теряем те самые 0.4 секунды и получаем дельту3 дня 2 часа 39 минут 50 секунды. Соответственно при обратном пересчете мы получим ((50/60+39)/60+2)/24+3 = 3.11099537037037. Так что вот так.

Будьте аккуратны с неявным преобразованием данных!

Ссылки по теме


 Распечатать »
 Правила публикации »
  Написать редактору 
 Рекомендовать » Дата публикации: 16.12.2009 
 

Магазин программного обеспечения   WWW.ITSHOP.RU
Oracle Database Personal Edition Named User Plus Software Update License & Support
Oracle Database Standard Edition 2 Processor License
Oracle Database Personal Edition Named User Plus License
Oracle Database Standard Edition 2 Named User Plus License
IBM Domino Messaging Server Processor Value Unit (PVU) License + SW Subscription & Support 12 Months
 
Другие предложения...
 
Курсы обучения   WWW.ITSHOP.RU
 
Другие предложения...
 
Магазин сертификационных экзаменов   WWW.ITSHOP.RU
 
Другие предложения...
 
3D Принтеры | 3D Печать   WWW.ITSHOP.RU
 
Другие предложения...
 
Новости по теме
 
Рассылки Subscribe.ru
Информационные технологии: CASE, RAD, ERP, OLAP
Новости ITShop.ru - ПО, книги, документация, курсы обучения
Программирование на Microsoft Access
CASE-технологии
СУБД Oracle "с нуля"
Программирование на Visual Basic/Visual Studio и ASP/ASP.NET
Проект mic-hard - все об XP - новости, статьи, советы
 
Статьи по теме
 
Новинки каталога Download
 
Исходники
 
Документация
 
 



    
rambler's top100 Rambler's Top100