【问题标题】:SQLite - Convert time (like 08:00) into integerSQLite - 将时间(如 08:00)转换为整数
【发布时间】:2018-12-25 01:09:14
【问题描述】:

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

我有这张桌子:

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 = 500 分钟。 p>

如何将 ('08:20') 转换为数字 500?我不需要用秒计算。

或者您认为使用 DATETIME 是否更好?

PS:它是一个调度程序,在 Outlook 中列出诸如议程之类的事件,例如

非常感谢您的任何建议。

最好的问候

【问题讨论】:

    标签: sql sqlite date datetime time


    【解决方案1】:

    SQLite 没有 DateTime 数据类型。

    您可以将值存储为char(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');
    

    【讨论】:

    • 是的,比较效果很好:) 非常感谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-10
    • 1970-01-01
    • 1970-01-01
    • 2018-01-24
    相关资源
    最近更新 更多