如何在SQL中创建时间属性?

时间:2016-04-01 10:55:29

标签: mysql

我尝试用这种方式创建一个表:

create table attendance (
      userId char(10) primary key not null, 
      name varchar(35) not null, 
      date_attendance date not null, 
      start_time timestamp 'HH24:MI:SS', 
      finish_time timestamp 'HH24:MI:SS'
);

我是否正确地以这种方式创建时间字段或者有更好的选择?

3 个答案:

答案 0 :(得分:0)

Timestamp将保留日期和时间。还有数据类型time,它可能更适合您的用例。

CREATE TABLE attendance (
      userId char(10) primary key not null, 
      name varchar(35) not null, 
      date_attendance date not null, 
      start_time time,
      finish_time time
);

答案 1 :(得分:0)

这是非常正确的,您可以做的一件事是在提供日期设置为非null时,您还可以通过为它们分配getDate或getUTcDate()函数来提供默认日期(取决于应用程序要求)

答案 2 :(得分:0)

什么是HH24:MM:SS?这看起来像是TO_CHAR()函数的Oracle / Postgres参数。

据推测,您需要两个不同的,并且MySQL具有以下数据类型:

create table attendance (
      userId char(10) primary key not null, 
      name varchar(35) not null, 
      date_attendance date not null, 
      start_time time, 
      end_time time
);

您感到困惑timestamptime。如果要在列值中包含时区信息,请使用timestamp。我猜测时区信息对您的应用程序并不重要。

这强制要求每个attendance记录在一天内完成。另一种方法是将datetime用于:

create table attendance (
      userId char(10) primary key not null, 
      name varchar(35) not null, 
      start_time datetime, 
      end_time datetime
);

这将允许end_time在午夜过去 - 这可能在某些时候有用。

此外,我建议对主键使用自动递增的整数:

create table attendance (
      userId unsigned auto_increment primary key,
      name varchar(35) not null, 
      start_time datetime, 
      end_time datetime
);

最后,如果要将日期/时间/日期时间格式化为字符串,请使用date_format()