代码之家  ›  专栏  ›  技术社区  ›  Bambi Bunny

sqlite-将时间(如08:00)转换为整数

  •  0
  • Bambi Bunny  · 技术社区  · 8 年前

    拜托,我读到最好的方法(也是最有效的方法)是将时间节省为smallint(实数整数)。是真的吗?我正在构建使用sqlite3数据库和db大小必须很小的应用程序,并且用日期和时间(特别是时间)计算必须是最有效的。

    我有这张桌子:

    CREATE TABLE events (
        id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
        time_start SMALLINT NOT NULL ,
        time_end SMALLINT NOT NULL,
        message_code VARCHAR(64) NOT NULL,
        FOREIGN KEY (message_code) REFERENCES messages (message_code),
        CHECK ((time_start BETWEEN 0 AND 1440) AND (time_end between 0 and 1440) AND (message_code <> ''))
    );
    

    但事实上,我想像 08:20 因为没人想计算8小时是480分钟+20= 五百 分钟。

    如何将(‘08:20’)转换为数字500是可能的?我不需要用秒来计算。

    或者你认为用 日期时间 是更好的方法吗?

    PS:它是一个调度程序,它在Outlook中列出一个类似日程表的事件,例如

    非常感谢你的建议。

    顺祝商祺!

    1 回复  |  直到 8 年前
        1
  •  1
  •   Alexander Petrov    8 年前

    sqlite没有 DateTime 数据类型。

    您可以将值存储为 char(5) 字符串-这只需要5个字节。您可以直接比较这些值。

    sqlite> select '08:20' > '08:30';
    0
    
    sqlite> select '08:20' = '08:30';
    0
    
    sqlite> select '08:20' < '08:30';
    1
    

    0为假,1为真。

    还有内置的 time 功能:

    sqlite> select time('08:20') = time('now');
    
    sqlite> select time('08:20') = time('2018-01-01 05:30:59');