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

Creating a date column with date format in SQL

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

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

现在,我遇到的问题是,当我以不同的格式输入日期时 (即 11-05-2015),它在 table。它不应该给我一个错误信息或者重新格式化成我设置的格式吗? (我更喜欢后者,除非数据输入错误即32-13-20015)

有人可以告诉我我做错了什么吗?

亲切的问候。

有两个不同的因素在起作用:

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

这两者很容易混淆,使用SQLite时更是如此。

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

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

这里有一个建议:

1。日期存储类型

像这样创建你的table:

CREATE TABLE patient(
    dateregistered int not null
);

并像这样插入值:

2。插入日期

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

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

julianday('2015-02-29')

将导致 2015-03-01 存储在 table 中。还有这个:

julianday('2015-13-20')

会变成NULL值,插入时触发错误。

实际上无法插入无效日期的内容。

3。查询日期

你会得到像这样的可读格式的日期:

select date(dateregistered)
from   patient

date 函数负责格式化为 YYYY-MM-DD。

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

select date(dateregistered+1)
from   patient

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

select dateinvited - dateregistered
from   patient

4。可选:创建视图

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

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

现在当你 select 从那个角度看时:

select dateregistered
from   vw_patient

你会得到一个字符串:

2015-02-28