2012-11-02 62 views
2

我對Oracle有個疑問(我安裝了Oracle 11g Express Edition)。 我想插入'date'和'time'的值,但我無法分開它們。Oracle - 單獨的時間和日期

create table Match 
(
    numMatch number(2) constraint PKMatch primary key, 
    dateM date, 
    heureM date, 
    numE_Eq number(2), 
    numE_Eq2 number(2), 
    nomTerrain varchar2(30) 
); 

- 「工具」=> 「首選項」=> 「格式德日期:DD/MM/YYYY HH24:MI:SS」

insert into Match values (1,to_date 
('10/12/2010','DD/MM/YYYY'),to_date('15:00:00','HH24:MI:SS'),1,3,'Stade Argentina' 
); 

結果:

dateM: 10/12/2010 00:00:00 

heureM: 01/11/2012 15:00:00 

PS:我試過to_char而不是to_date,但它根本不起作用。


是的,我知道的「DATE數據類型包含日期和時間」,但它是誰堅稱顯示日期和時間分別在該表中, 的教授和我以前見過你的解決方案,但對我來說,這是一個查詢,而不是在表中插入值。

所以我想知道我怎麼能有一個表直接呈現日期和時間。

+0

你想要什麼結果? – madth3

回答

0

Oracle DATE類型包含DATE和TIME信息(因爲它在添加標準DATE,TIME和TIMESTAMP類型時預先標準SQL-92標準)。所以,你不能在桌子上分開它們;也沒有理由這麼做。如果您願意,可以創建一個視圖,將DATE字段顯示爲單獨的僅限日期和僅顯示時間的顯示字段。

2

Oracle沒有TIME數據類型。您可以使用時間組件來存儲日期,並根據時間進行查詢,並根據時間進行顯示。

select to_char(my_date_field, 'HH24:MI:SS') 
from my_table 
where to_date(my_date_field, 'HH24:MI') = '18:51'; 

或者,您可以將午夜時間存儲爲整數,然後根據該時間計算一天中的時間。它也將使查詢範圍時間更容易,我認爲。

此外,在會話中,執行下面有所有的日期格式,你希望的方式:

alter session set nls_date_format = 'YYYY-MM-DD HH24:MI:SS' 
0

另一種方式來表示一個時間在Oracle中等同類型與間隔類型,如:

SQL> CREATE TABLE foo (
     bar INTERVAL DAY(0) TO SECOND(3) 
    ); 

這將允許存儲DAY組件的0精度的時間段和SECOND組件的3個小數點。一個INSERT例子是:

SQL> INSERT INTO foo VALUES ('0 01:01:01.333'); 

什麼是偉大的關於這個方法的缺點是,它會自動給出一個SELECT在一個直觀的格式結果,無需轉換:

SQL> SELECT * FROM foo; 

BAR 
--------------------------------------------------------------------------- 
+0 01:01:01.333 
0

但它的教授誰堅持在表中分別顯示日期和時間

雖然這聽起來像一個非常愚蠢的要求,但你可以做的一件事是創建兩次計算機欄,顯示的日期和時間爲VARCHAR列:

create table match 
(
    nummatch number(2) constraint pkmatch primary key, 
    the_date date, 
    datem generated always as to_char(the_date, 'yyyy-mm-dd'), 
    heurem generated always as to_char(the_date, 'hh24:mi') 
    nume_eq number(2), 
    nume_eq2 number(2), 
    nomterrain varchar2(30) 
); 

insert into Match (nummatch, the_date, nume_eq, nume_eq2, nomterrain) 
values 
(1,to_date('10/12/2010 15:00:00','DD/MM/YYYY hh24:mi:ss'),1,3,'Stade Argentina'); 

然後,

select * 
from match; 

將返回:

NUMMATCH | THE_DATE   | DATEM  | HEUREM | NUME_EQ | NUME_EQ2 | NOMTERRAIN  
---------+---------------------+------------+--------+---------+----------+---------------- 
     1 | 2010-12-10 15:00:00 | 2010-12-10 | 15:00 |  1 |  3 | Stade Argentina 

或者你可以只在表上創建一個視圖,分隔日期和時間使用to_char()

相關問題