2017-04-10 195 views
0

我試着創建一個表,其中一個屬性'appdate'必須有一個包含時間的數據dtype日期。我試過用char來表示無效的關係運算符。我該怎麼做呢?Oracle日期和時間數據類型

SQL> create table appointment 
2 (StaffID char(10), constraint appointment_staffid_fk 
    3 foreign key (staffid) references staff (staffid), 
    4 PatientNum varchar2(10), constraint appointment_PatientNum_fk 
    5 foreign key (patientnum) references patient (patientnum), 
    6 appdate date 
    7 constraint appointment_appdate_ch check (to_char(appdate, "mm/dd/yyyy hh24:mi:ss")) 
    8 ); 
constraint appointment_appdate_ch check (to_char(appdate, "mm/dd/yyyy hh24:mi:ss")) 
                        * 
ERROR at line 7: 
ORA-00920: invalid relational operator 
+1

您不需要爲日期添加約束。 –

+0

你的問題不清楚。您能否編輯它以包含一些有效日期和一些無效日期,並解釋爲什麼無效日期無效? –

+1

一旦你聲明你的列是'DATE',數據庫就會確保以這種方式存儲數據庫,並且正如下面的答案所說的那樣,默認情況下,DATE在Oracle中有一個TIME組件 - 即使你在查詢時沒有看到它,它就在那裏。 – thatjeffsmith

回答

1

在Oracle一個DATE數據類型總是具有時間分量,從而檢查約束是不必要的。

它在內部存儲爲7- or 8- bytes:即使你沒有設置時間成分

BYTE STORES 
---- -------------------------- 
1 TRUNC(Year/100) + 100 
2 MOD(Year, 100) + 100 
3 Month 
4 Day 
5 Hour + 1 
6 Minute + 1 
7 Seconds + 1 

,它仍然存儲在數據庫中已經具有時間00:00:00(所以最後3個字節將每組到1)。

相關問題