有两种不同的东西在起作用:
- 日期存储在数据库中的格式
- 日期的显示格式
这两者很容易混淆,使用 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