我尝试用这种方式创建一个表:
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'
);
我是否正确地以这种方式创建时间字段或者有更好的选择?
答案 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
);
您感到困惑timestamp
和time
。如果要在列值中包含时区信息,请使用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()
。