В одном поле мне нужно сохранить не пару datetime, т.е. стандартную дату Oracle.
01/10/2009 22:10:39
Но только время
22:10:39
Я думаю, что сэкономить дисковое пространство (у меня 2 миллиона строк) или обеспечить более быструю обработку.
Ответ 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)