Хранение даты в базе ORACLE

stepplerus
Дата: 30.11.2012 17:40:56
Добрый день.

Сам я на ORACLE не разрабатываю, и, в ближайшем будущем, не собираюсь.
Хочу узнать, как именно дата хранится в ORACLE в базе. В каком виде? Что это?
Например, могу рассказать, что в PROGRESS 4GL дата хранится в виде целого числа, которое отсчитывает число дней от какой-то даты. Поэтому можно легко преобразовать дату в целое и обратно, легко вычесть из одной даты другую в виде day = date2 - date1.

Вторая часть вопроса относится к тому, как в ORACLE хранится TIMESTAMP (если таковой есть).
Опять же, могу рассказать, что, пока у нас такого типа не было, мы хранили это в виде DECMAL, как INT(DATE) + TIME / 100000.

Спасибо.

PS. Не надо посылать меня в BOL или еще куда, их у меня нет.
Rb-Sr
Дата: 30.11.2012 17:44:03
stepplerus
Добрый день.

Сам я на ORACLE не разрабатываю, и, в ближайшем будущем, не собираюсь.
Хочу узнать, как именно дата хранится в ORACLE в базе. В каком виде? Что это?
Например, могу рассказать, что в PROGRESS 4GL дата хранится в виде целого числа, которое отсчитывает число дней от какой-то даты. Поэтому можно легко преобразовать дату в целое и обратно, легко вычесть из одной даты другую в виде day = date2 - date1.

Вторая часть вопроса относится к тому, как в ORACLE хранится TIMESTAMP (если таковой есть).
Опять же, могу рассказать, что, пока у нас такого типа не было, мы хранили это в виде DECMAL, как INT(DATE) + TIME / 100000.

Спасибо.

PS. Не надо посылать меня в BOL или еще куда, их у меня нет.


Например,
+
ops$tkyte@ORA11GR2> create table t ( x date );
Table created.

ops$tkyte@ORA11GR2> insert into t (x) values
2 ( to_date( '25-jun-2005 12:01:00',
3 'dd-mon-yyyy hh24:mi:ss' ) );
1 row created.

ops$tkyte@ORA11GR2> select x, dump(x,10) d from t;

X D
--------- -----------------------------------
25-JUN-05 Typ=12 Len=7: 120,105,6,25,13,2,1

The century and year bytes (the 120,105 in the DUMP output) are stored in an excess-100 notation.
You would have to subtract 100 from them to determine the correct century and year. The reason for the
excess-100 notation is support of BC and AD dates. If you subtract 100 from the century byte and get a
negative number, it is a BC date. For example:

ops$tkyte@ORA11GR2> insert into t (x) values
2 ( to_date( '01-jan-4712bc',
3 'dd-mon-yyyybc hh24:mi:ss' ) );
1 row created.

ops$tkyte@ORA11GR2> select x, dump(x,10) d from t;

X D
--------- -----------------------------------
25-JUN-05 Typ=12 Len=7: 120,105,6,25,13,2,1
01-JAN-12 Typ=12 Len=7: 53,88,1,1,1,1,1
Dimitry Sibiryakov
Дата: 30.11.2012 17:44:27

stepplerus
Хочу узнать, как именно дата хранится в ORACLE в базе. В каком виде? Что это?
PS. Не надо посылать меня в BOL или еще куда, их у меня нет.

Ну так скачай документацию и прочти SQL Reference, глава 3, Datatypes.

Posted via ActualForum NNTP Server 1.5

stepplerus
Дата: 30.11.2012 17:53:32
Dimitry Sibiryakov
stepplerus
Хочу узнать, как именно дата хранится в ORACLE в базе. В каком виде? Что это?
PS. Не надо посылать меня в BOL или еще куда, их у меня нет.

Ну так скачай документацию и прочти SQL Reference, глава 3, Datatypes.


Я сюда пришел именно для того, чтобы не качать документацию.

Спасибо за помошь, бро.
Vint
Дата: 30.11.2012 17:59:22
stepplerus,

тогда можешь абсолютно спокойно свалить отсюда так же как пришел. никто не обидится, лучший способ это открыть документацию.
stepplerus
Дата: 30.11.2012 18:06:01
Vint
stepplerus,

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


И тебе спасибо за помощь, бро.
И за вежливость тоже, бро.

Одно могу сказать точно, слова "битовая маска" или "строка" или "структура" заняли бы гораздо меньше места на экране, чем те, что были написаны.
Dimitry Sibiryakov
Дата: 30.11.2012 18:07:19

stepplerus
Я сюда пришел именно для того, чтобы не качать документацию.

В таком случае вот тебе краткий ответ: внутренний формат хранения типов DATE и TIMESTAMP
не предназначен для использования и может быть изменён в любой момент. Вся работа с
данными типами должна производиться посредством функций API.

Posted via ActualForum NNTP Server 1.5

-2-
Дата: 30.11.2012 18:10:50
stepplerus
PS. Не надо посылать меня в BOL или еще куда, их у меня нет.
а sql.ru где взял?
stax..
Дата: 30.11.2012 18:47:00
stepplerus
Добрый день.

Сам я на ORACLE не разрабатываю, и, в ближайшем будущем, не собираюсь.
Хочу узнать, как именно дата хранится в ORACLE в базе. В каком виде? Что это?
Например, могу рассказать, что в PROGRESS 4GL дата хранится в виде целого числа, которое отсчитывает число дней от какой-то даты. Поэтому можно легко преобразовать дату в целое и обратно, легко вычесть из одной даты другую в виде day = date2 - date1.

Вторая часть вопроса относится к тому, как в ORACLE хранится TIMESTAMP (если таковой есть).
Опять же, могу рассказать, что, пока у нас такого типа не было, мы хранили это в виде DECMAL, как INT(DATE) + TIME / 100000.

Спасибо.

PS. Не надо посылать меня в BOL или еще куда, их у меня нет.

в оракле нет базового типа дата, есть date ето по факту datetime
дата хранится во внутреннем ораклячем формате (хранится с точностью до секунд)
в оракле date2 - date1 ето количество "дней" между двумя датами (в общем случае дробное число 1/24 час 1/24/60 мінута 1/24/60/60 секунда)

автор
ORACLE использует для хранения дат собственный внутренний
формат. Данные дат хранятся в фиксированных полях длиной семь
байт, соответствующих веку, году, месяцу, дню, часу, минуте и
секунде.



подозреваю что в след веріях буде тип time (счас он скрыт/недокументирован/нет)

в не древних версиях есть TIMESTAMP, хранится тож во внутренням оряклячем формате
грубо ето дата с точностью до "микросекунд" с учетом часового пояса

зи
есть еще INTERVAL

....
stax
Серафимный Шестикрыл
Дата: 30.11.2012 18:56:26
stax..
в не древних версиях есть TIMESTAMP, хранится тож во внутренням оряклячем формате
грубо ето дата с точностью до "микросекунд" с учетом часового пояса


Станислав, вот просто для интереса - зачем излагать материал в виде полуправды ленивому ламеру,
ежели есть [url=http://docs.oracle.com/cd/B19306_01/server.102/b14200/sql_elements001.htm#sthref116
]документация/url], коею прочесть - 10 минут работы ?

Ты правда думаешь, что совершаешь доброе дело ?