处理sql中的时间

时间:2017-11-30 03:10:29

标签: sql oracle

我正在创建一个数据库,学生可以使用该数据库检查辅导员的可用性,并安排与他们约会。我将在此示例之外执行GUI和触发器。

我的问题是我有一张桌子,Tutor,包括导师信息以及他们可用的时间。当我在表创建期间声明数据类型 time 时,它不会将其识别为有效的数据类型。

我想存储每个导师每天的可用时间以便稍后在调度表中进行参考(功能将检查教师当天是否可用,在该时间段内是否允许更新日程表)。此外,每位导师只能工作一定时间。这些问题除了这一点之外,但可能与给定的数据类型冲突,并说明我使用时间的原因。

我正在使用pl / sql和oracle sql developer。

我们非常感谢任何见解,我已将我的代码包含在下面,请参阅上述信息表'schedule'

----Dropping tables----
drop table student cascade constraints;
drop table course cascade constraints;
drop table schedule cascade constraints;
drop table tutor cascade constraints;

 ----Creating Tables-----
 create table course(
 cou_id number(4),
 major_id number(4),
 cou_name varchar2(20),
 major_name varchar2 (20),
 professor varchar2 (20),
 constraint course_pk primary key (cou_id)
 );


 create table student(
 stu_id number(4) constraint stu_id_pk primary key,
 stu_fn varchar2 (20),
 stu_ln varchar2 (20),
 stu_city varchar2 (20),
 stu_ethn varchar2 (20),
 cou_id number(4) constraint cou_id_fk references course(cou_id),
 stu_gpa number(3,2) constraint stu_gpa_c1 check (stu_gpa <=4.0 and stu_gpa >=0)
 );

 create table tutor(
 tutor_id number(4) constraint tutor_id_pk primary key,
 tut_fn varchar2 (20),
 tut_ln varchar2 (2),
 major_id number(4) constraint tutor_major_id_fk references course(major_id),
 mon_avail time,
 tues_avail time,
 wed_avail time,
 thurs_avail time,
 fri_avail time
 );

 create table schedule(
 schedule_id number(4) constraint schedule_id primary key,
 tut_id  number(4) constraint tut_id_fk references tutor(tutor_id),
 stu_id number(4) constraint stu_id_fk references student(stu_id),
 day_resv varchar(2) constraint day_resv_c1 check(day_resv=upper(day_resv))
                     constraint day_resv_c2 check (day_resv in ('MO', 'TU', 'WE', 'TH', 'FR')),
 time_resv time
 );

3 个答案:

答案 0 :(得分:2)

Oracle没有TIME数据类型。 DATE类型包含日期(年,月,日)和时间(小时,分钟,整数秒)的字段。如果您需要更高的精度,可以使用TIMESTAMP,并允许测量小数秒。出于您的目的,DATE可能就是您想要的。 Manual reference here

Best ofluck。

答案 1 :(得分:0)

鉴于(正如@ bob-jarvis在他的回答中所指出的)Oracle没有TIME数据类型,您可能希望考虑使用SMALLINT字段作为时间,并将其存储为分钟(午夜后)值。

这将使大多数比较变得快速而简单,只有格式化为HH:MM才能显示更难,此页面应该有助于此:Convert minutes to HH24:MI format

请注意,您将转换一个数字,而不是日期时间,因此请查看@ bobs的答案以获取正确的示例。

答案 2 :(得分:0)

另一个选项可能是INTERVAL DAY TO SECOND数据类型。顾名思义它可以存储天,小时,分钟,秒和小数秒,并且可能比“整数分钟”更容易处理。