oracle只插入时间

时间:2012-08-31 12:21:04

标签: oracle time to-date

我想将数据作为时间而不是日期插入数据库。如果我使用to_date('2012-08-31 07:39:33', 'YYYY-MM-DD HH24:MI:SS'),它也会添加日期。 如果我使用to_date('09:34:00', 'HH24:MI:SS'),它会增加年,月,日,从不知道:| 后来我需要获取时间在x和y之间的行,而不考虑年,月或日。我怎么做? 感谢

3 个答案:

答案 0 :(得分:3)

作为Dave显示的date解决方案的替代方案,您可以为该列使用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

显示间隔与don't have format models有点尴尬,但如果需要,请参阅this question了解一些想法。如果您只使用它们进行过滤,那么这可能根本不是问题。

答案 1 :(得分:1)

DATE类型始终包含日期组件。

一种选择是继续使用DATE并编写代码以忽略日期组件。为了对时间效率进行查询,您可能希望在TO_CHAR( date_field, 'HH24:MI:SS' )之类的内容上创建基于函数的索引,并在查询中使用该表达式。

或者,您可以使用NUMBER字段存储自午夜以来的秒数,并根据该字段编写查询。

答案 2 :(得分: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