2012-08-31 69 views
3

我想插入數據到數據庫作爲時間,而不是日期。如果我使用to_date('2012-08-31 07:39:33', 'YYYY-MM-DD HH24:MI:SS')它也會添加日期。 如果我使用to_date('09:34:00', 'HH24:MI:SS'),它會從一開始就增加年,月,日。 後來我需要得到行的時間在x和y之間,不考慮年,月或日。我怎麼做? 謝謝oracle插入只有時間

回答

1

A DATE類型始終包含日期組件。

一種選擇是繼續使用DATE並編寫代碼以忽略日期組件。爲了在時間上進行查詢,您可能需要在TO_CHAR(date_field, 'HH24:MI:SS')之類的東西上創建一個基於函數的索引,並在查詢中使用該表達式。

或者,您可以使用NUMBER字段來存儲自午夜以來的秒數,然後按照這種方式編寫查詢。

+0

感謝。所以可以給我舉個例子,應該是什麼樣子? select * from table1 where TO_CHAR(collumn_date,'HH24:MI:SS')'08:00:00'和'17:00:00'之間的collumn_date? – user1164545

+0

'select * from table1''在'08:00:00'和'17:00:00'之間的TO_CHAR(collumn_date,'HH24:MI:SS') –

3

作爲替代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的一些想法,如果需要。如果你只使用它們進行過濾,那麼這可能不是問題。

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