sqlite 中的日期

Dates in sqlite

我在 SQLite3 中有一个数据库,我想在其中根据最近的日期 (DESC) 显示信息。

所以这是我的 SQL:

CREATE TABLE IF NOT EXISTS news(
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    userid INTEGER,
    title TEXT NOT NULL,
    photo TEXT NOT NULL,
    datePosted INTEGER,
    article TEXT NOT NULL,  
    FOREIGN KEY(userid) REFERENCES users(id)
);

我认为您必须使用 DATE 类型作为日期,但您也可以使用 INTEGER 和 TEXT...我应该使用什么?我只想手动插入这种格式的日期:'dd/mm/yyy' 然后按日期排序,严格按日月年排序。

查询:

INSERT INTO news(userid, title, photo, datePosted, article)
 VALUES(1, "a string", "a string", "30/11/2020", "a string");
INSERT INTO news(userid, title, photo, datePosted, article)
 VALUES(2, "a string", "a string", "07/11/2020", "a string");
INSERT INTO news(userid, title, photo, datePosted, article)
 VALUES(1, "a string", "a string", "09/12/2020", "a string");
INSERT INTO news(userid, title, photo, datePosted, article)
 VALUES(2, "a string", "a string", "01/12/2020", "a string");
INSERT INTO news(userid, title, photo, datePosted, article)
 VALUES(1, "a string", "a string", "05/12/2020", "a string");

我试过这个:

SELECT * FROM news 
ORDER BY news.datePosted DESC;

SQLite 中没有 Date 数据类型。
您可以在此处找到有关 SQLite 数据类型的所有信息:Datatypes In SQLite Version 3.

您可以将日期存储为 INTEGER(unix 时间戳)、REAL 数字(儒略日数)或 TEXT.

如果您选择 INTEGERREAL,那么日期是可比较的,您只需要 SQLite's date and time functions 将它们格式化为可读格式。

如果您选择 TEXT 数据类型,则使用 YYYY-MM-DD 格式,这是 SQLite 唯一有效的文本日期格式,因为任何其他格式都不可比,您必须使用字符串函数来使其具有可比性或根据需要重新格式化。

在您的情况下,如果您以 DD/MM/YYYY 格式存储日期,那么您将无法直接对日期进行排序,因为对于 TEXT 列,排序是按字母顺序排列的,因此您需要重新排列字符串函数日期的 3 个部分以获得可比较的格式 YYYY-MM-DD 然后应用排序。