在SQL中创建日期格式的日期列
我正在创建一个包含日期注册列的表。我想把它格式化为“YYYY-MM-DD”。我已经试过了在SQL中创建日期格式的日期列,sql,sqlite,date-format,sqlitemanager,Sql,Sqlite,Date Format,Sqlitemanager,我正在创建一个包含日期注册列的表。我想把它格式化为“YYYY-MM-DD”。我已经试过了 CREATE TABLE patient( dateregistered text format 'YYYY-MM-DD' not null ); 现在,我遇到的问题是,当我以不同的格式输入日期(即11-05-2015)时,它会在表中接受该日期。它不应该给我一条错误消息,或者将其重新格式化为我设置的格式吗?(我更喜欢后者,除非输入的数据有误,即32-13-20015) 有人能告诉我我做错了什么吗
CREATE TABLE patient(
dateregistered text format 'YYYY-MM-DD' not null
);
现在,我遇到的问题是,当我以不同的格式输入日期(即11-05-2015)时,它会在表中接受该日期。它不应该给我一条错误消息,或者将其重新格式化为我设置的格式吗?(我更喜欢后者,除非输入的数据有误,即32-13-20015)
有人能告诉我我做错了什么吗
亲切的问候。有两件不同的事情在起作用:
CREATE TABLE patient(
dateregistered int not null
);
select date(dateregistered)
from patient
并插入如下值:
CREATE TABLE patient(
dateregistered int not null
);
select date(dateregistered)
from patient
2.插入日期
通过此设置,无效日期将变为有效日期或被拒绝。例如:
julianday('2015-02-29')
将导致2015-03-01存储在表中。这是:
julianday('2015-13-20')
将变为空值,在插入时触发错误
实际上,插入无效日期的内容是不可能的
3.查询日期
您将获得如下可读格式的日期:
CREATE TABLE patient(
dateregistered int not null
);
select date(dateregistered)
from patient
日期函数负责将格式设置为YYYY-MM-DD
但您也可以进行计算,例如添加一天:
select date(dateregistered+1)
from patient
或者,如果您还有另一个日期,如DateInvested,您可以轻松获得这两个事件之间的天数:
select dateinvited - dateregistered
from patient
4.可选:创建视图
如果您发现无论何时查询YYYY-MM-DD格式的日期,都要指定日期(…)
很麻烦,请创建一个视图来执行此操作:
create view vw_patient as
select date(dateregistered) dateregistered
from patient
现在,当您从该视图中选择时:
select dateregistered
from vw_patient
您将得到一个字符串:
2015-02-28
有两个不同的因素在起作用:
CREATE TABLE patient(
dateregistered int not null
);
select date(dateregistered)
from patient
并插入如下值:
CREATE TABLE patient(
dateregistered int not null
);
select date(dateregistered)
from patient
2.插入日期
通过此设置,无效日期将变为有效日期或被拒绝。例如:
julianday('2015-02-29')
将导致2015-03-01存储在表中。这是:
julianday('2015-13-20')
将变为空值,在插入时触发错误
实际上,插入无效日期的内容是不可能的
3.查询日期
您将获得如下可读格式的日期:
CREATE TABLE patient(
dateregistered int not null
);
select date(dateregistered)
from patient
日期函数负责将格式设置为YYYY-MM-DD
但您也可以进行计算,例如添加一天:
select date(dateregistered+1)
from patient
或者,如果您还有另一个日期,如DateInvested,您可以轻松获得这两个事件之间的天数:
select dateinvited - dateregistered
from patient
4.可选:创建视图
如果您发现无论何时查询YYYY-MM-DD格式的日期,都要指定日期(…)
很麻烦,请创建一个视图来执行此操作:
create view vw_patient as
select date(dateregistered) dateregistered
from patient
现在,当您从该视图中选择时:
select dateregistered
from vw_patient
您将得到一个字符串:
2015-02-28
您应该在数据库中使用日期格式存储日期,而不是作为文本。不要这样做:您需要做更多的验证:2015-02-29也不是有效日期。使用日期数据类型。格式化是您在查询数据时要做的事情。您好@trincot,谢谢您的回复。当你说使用日期数据类型时,它会以YYYY-MM-DD格式存储日期吗?@Gordon Linoff,当我使用这样的日期格式:“dateregistered date not null”时,我仍然遇到同样的问题。它采用任何数据格式。所以,如果我输入11052015,它将显示为“11052015”,而我希望它显示为“2015-05-11”。你知道我以后怎么做吗?你不应该担心日期存储的格式。它是二进制的。只有在实际查询此数据以进行显示时,才应该对其应用格式设置。但是使用本机日期类型会给您带来很多好处:更快的查询、正确的排序、拒绝无效日期、可以轻松操作日期(添加、减去、间隔等)。您应该使用日期格式在数据库中存储日期,不作为文本。不要这样做:你将不得不做更多的验证:2015-02-29也不是一个有效日期。使用日期数据类型。格式化是您在查询数据时要做的事情。您好@trincot,谢谢您的回复。当你说使用日期数据类型时,它会以YYYY-MM-DD格式存储日期吗?@Gordon Linoff,当我使用这样的日期格式:“dateregistered date not null”时,我仍然遇到同样的问题。它采用任何数据格式。所以,如果我输入11052015,它将显示为“11052015”,而我希望它显示为“2015-05-11”。你知道我以后怎么做吗?你不应该担心日期存储的格式。它是二进制的。只有在实际查询此数据以进行显示时,才应该对其应用格式设置。但是使用本机日期类型将