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

时间:2016-03-19 16:16:38

标签: sql sqlite date-format sqlitemanager

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

java.lang.ClassNotFoundException: com.example.service.AccountServiceRemote

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

有人能让我知道我做错了吗?

亲切的问候。

1 个答案:

答案 0 :(得分:0)

有两种不同的东西在起作用:

  1. 日期格式存储在数据库中
  2. 日期格式显示为
  3. 使用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')
    

    将导致2​​015-03-01存储在表格中。这个:

    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 dateregistered
    from   vw_patient
    

    你会得到一个字符串:

      

    2015年2月28日