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

7cjasjjr  于 2022-12-26  发布在  Mysql
关注(0)|答案(3)|浏览(145)

我试着这样创建一个表:

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'
);

我这样创建时间字段是对的吗?还是有更好的选择?

ee7vknir

ee7vknir1#

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

x0fgdtte

x0fgdtte2#

HH24:MM:SS是什么?它看起来像TO_CHAR()函数的Oracle/Postgres参数。
假设您需要两个不同的 times,而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()

xqk2d5yq

xqk2d5yq3#

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
);

相关问题