在 SQL 中创建具有日期格式的日期列



>我正在创建一个包含日期注册列的表。我希望它格式化为"YYYY-MM-DD"。我已经尝试过了...

CREATE TABLE patient(
    dateregistered text format 'YYYY-MM-DD' not null
);

现在,我遇到的问题是,当我以不同的格式(即 11-05-2015)输入日期时,它会接受表中的该日期。它不应该给我一条错误消息或将其改革为我设置的格式吗?(我更喜欢后者,除非输入的数据是错误的,即 32-13-20015)

有人可以让我知道我做错了什么吗?

亲切问候。

有两种不同的东西在起作用:

  1. 日期存储在数据库中的格式
  2. 日期的显示格式

这两者很容易混淆,在使用SQLite时甚至更多。

但是,将数据库中的日期存储为文本并不是一个好主意。这意味着数据库可以存储无效日期,例如"ABC",也可以存储"2015-13-01"和"2015-02-29"。

此外,数据库使用日期的数字表示比 10 个字符的字符串更快。使用数字表示,您可以更轻松地进行日期计算,例如向日期添加一天(+1),而使用字符串表示形式会更复杂。

这里有一个建议:

1. 日期存储类型

像这样创建表:

CREATE TABLE patient(
    dateregistered int not null
);

并插入如下值:

2. 插入日期

insert into patient values (julianday('2015-12-31'));

通过此设置,无效日期将变为有效日期或被拒绝。例如:

julianday('2015-02-29')

将导致 2015-03-01 存储在表中。而这个:

julianday('2015-13-20')

将变为 NULL 值,在插入时触发错误。

实际上,插入不是有效日期的内容变得不可能。

3. 查询日期

您将获得可读格式的日期,如下所示:

select date(dateregistered)
from   patient

日期函数负责将格式设置为 YYYY-MM-DD。

但你也可以做计算,比如添加一天:

select date(dateregistered+1)
from   patient

或者,如果您还有另一个日期,例如受邀日期,您可以轻松获取这两个事件之间的天数:

select dateinvited - dateregistered
from   patient

4. 可选:创建视图

如果您发现在要查询 YYYY-MM-DD 格式的日期时指定date(...)很麻烦,请创建一个视图来执行此操作:

create view vw_patient as
select date(dateregistered) dateregistered
from   patient

现在,当您从该视图中选择时:

select dateregistered
from   vw_patient

你会得到一个字符串:

2015年02月28

SQL(MySQL)中有3种数据类型:

  1. 数值的
  2. 发短信
  3. 日期

T0 定义日期类型的列,可以使用 DATE 数据类型

例:

创建表(名称 varchar(30),Date_of_Birth日期)

相关内容

  • 没有找到相关文章