Подтвердить что ты не робот

Как хранить только время; не дата и время?

В одном поле мне нужно сохранить не пару datetime, т.е. стандартную дату Oracle.

01/10/2009 22:10:39

Но только время

22:10:39

Я думаю, что сэкономить дисковое пространство (у меня 2 миллиона строк) или обеспечить более быструю обработку.

4b9b3361

Ответ 1

Вы можете попробовать тип INTERVAL DAY TO SECOND, но он не спасет вас на любое место на диске... он очень подходит для этой цели.

create table t1 (time_of_day interval day (0) to second(0));

insert into t1 values (TO_DSINTERVAL('0 23:59:59'));

select date '2009-05-13'+time_of_day
from   t1;

11 байтов.

Ответ 2

Ваш лучший вариант, вероятно, будет хранить "секунды с полуночи" в качестве поля чисел.

SELECT to_char( SYSDATE, 'SSSSS' ) FROM dual;

Ответ 3

Вы можете извлечь время с даты в виде строки, например:

to_char(sysdate,'HH.MI.SS')

но не существует типа времени, которое поможет вам сэкономить место.

Ответ 4

Вы сохранили бы несколько Мбайт дискового пространства (которое ничто в наши дни), и вы почти ничего не достигнете в производительности.

Вы можете использовать столбец типа NUMBER для хранения количества секунд с полуночи, как было предложено, просто не забывайте о ограничениях.
(Вероятно, вы использовали бы NUMBER(5, 0), который использует 1-3 байта в зависимости от сохраненного значения, вместо константы 7 байт, используемых столбцом DATE)

Ответ 5

вы можете использовать:

TO_CHAR(<DATE_COLUMN>, '<TIME_FORMAT>');

Пример

TO_CHAR(SYSDATE, 'HH24:MI:SS');

для формата времени вы можете проверить здесь