>我正在创建一个包含日期注册列的表。我希望它格式化为"YYYY-MM-DD"。我已经尝试过了...
CREATE TABLE patient(
dateregistered text format 'YYYY-MM-DD' not null
);
现在,我遇到的问题是,当我以不同的格式(即 11-05-2015)输入日期时,它会接受表中的该日期。它不应该给我一条错误消息或将其改革为我设置的格式吗?(我更喜欢后者,除非输入的数据是错误的,即 32-13-20015)
有人可以让我知道我做错了什么吗?
亲切问候。
有两种不同的东西在起作用:
- 日期存储在数据库中的格式
- 日期的显示格式
这两者很容易混淆,在使用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种数据类型:
- 数值的
- 发短信
- 日期
T0 定义日期类型的列,可以使用 DATE 数据类型
例:
创建表(名称 varchar(30),Date_of_Birth日期)