我想将数据作为时间而不是日期插入数据库。如果我使用to_date('2012-08-31 07:39:33', 'YYYY-MM-DD HH24:MI:SS')
它也会添加日期。如果我使用to_date('09:34:00', 'HH24:MI:SS')
它,它还会从任何地方添加年、月、日:| 稍后我需要获取时间在 x 和 y 之间的行,而不考虑年、月或日。我怎么做?谢谢
问问题
24105 次
3 回答
4
作为date
Dave 显示的解决方案的替代方案,您可以使用interval
列的数据类型:
create table t42(id number, t interval day to second);
insert into t42 (id, t) values(123, to_dsinterval('0 07:39:33'));
insert into t42 (id, t) values(456, to_dsinterval('0 09:34:00'));
select id
from t42
where t between to_dsinterval('0 07:00:00') and to_dsinterval('0 07:59:59');
ID
----------
123
显示间隔有点尴尬,因为它们没有格式模型,但如果需要,请参阅这个问题以获得一些想法。如果您仅将它们用于过滤,那么这可能根本不是问题。
于 2012-08-31T14:03:54.093 回答
1
DATE
类型始终包含日期组件。
一种选择是继续使用DATE
并编写代码以忽略日期组件。为了使查询更高效,您可能希望在类似的东西上创建一个基于函数的索引,TO_CHAR( date_field, 'HH24:MI:SS' )
并在查询中使用该表达式。
或者,您可以使用一个NUMBER
字段来存储自午夜以来的秒数,并据此编写查询。
于 2012-08-31T12:28:08.727 回答
0
您可以使用数字列类型并将值插入为
INSERT INTO table_name (nTime)
VALUES (date - trunc(date));
然后选择值
select *
from table_name t
where t.nTime between (10 / 24 + 15 / 24 / 60) and (12 / 24 + 30 / 24 / 60) --between 10:15 and 12:30
于 2012-08-31T14:36:09.147 回答