2017-04-10 149 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)。

相关问题