1

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

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

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

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

亲切的问候。

4

1 回答 1

0

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

  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

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

select dateinvited - dateregistered
from   patient

4. 可选:创建视图

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

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

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

select dateregistered
from   vw_patient

你会得到一个字符串:

2015-02-28

于 2016-03-19T19:22:42.023 回答