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

在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) 有人能告诉我我做错了什么吗

我正在创建一个包含日期注册列的表。我想把它格式化为“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
    );
    
    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


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

  • 日期的格式存储在数据库中
  • 日期的显示格式
  • 很容易混淆这两者,使用SQLite时更容易混淆

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

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

    这里有一个建议:

    1.日期存储类型 按如下方式创建表:

    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”。你知道我以后怎么做吗?你不应该担心日期存储的格式。它是二进制的。只有在实际查询此数据以进行显示时,才应该对其应用格式设置。但是使用本机日期类型将