编写一个 SQLite 查询 returns 所有日期早于特定值的记录

Write an SQLite query that returns all records with dates older than a certain value

我有一个包含 5 列的 table,其中一列是 LastVisit(上次去餐厅的日期)。我想编写一个查询,该查询将 return 所有被点赞但超过三个月未访问过的餐厅,但我在日期函数方面犯了一些错误(我认为)。

如果我创建我的数据库并插入这些值:

CREATE TABLE MyRestaurants(Name VARCHAR, Cuisine VARCHAR, Distance INTEGER, LastVisit VARCHAR, Enjoy INTEGER);

INSERT INTO MyRestaurants (Name, Cuisine, Distance, LastVisit, Enjoy) 
VALUES ('Dakshin', 'Indian', 5, 2019-01-13, 1);

INSERT INTO MyRestaurants (Name, Cuisine, Distance, LastVisit, Enjoy) 
VALUES ('Cactus', 'Mexican', 6, 2018-01-4, 1);

然后我进行以下查询:

SELECT Name 
FROM MyRestaurants 
WHERE Enjoy = 1 AND DATE(LastVisit) <= DATE('now', '-3 month') 
ORDER BY Name;

我希望它是 return 仙人掌,但它 return 既是仙人掌又是 Dakshin。

我找到了这个帖子:

但是当我尝试 >= 它时 returns 没有值,当我只尝试 LastVisit 而不是 DATE(LastVisit) 时它 returns 没有值,当我尝试 90 天而不是3 个月 return 没有任何价值。我不明白我做错了什么。

您的插入语句似乎有问题,因为日期文字只是字符串文字,因此应该用单引号引起来:

INSERT INTO MyRestaurants (Name, Cuisine, Distance, LastVisit, Enjoy)
VALUES ('Dakshin', 'Indian', 5, '2019-01-13', 1);

INSERT INTO MyRestaurants (Name, Cuisine, Distance, LastVisit, Enjoy)
VALUES ('Cactus', 'Mexican', 6, '2018-01-04', 1);

然后,如果您想要最近 3 个月内未发生的记录,您应该使用:

SELECT Name
FROM MyRestaurants
WHERE Enjoy = 1 AND LastVisit <= DATE('now', '-3 month')
ORDER BY Name;

请注意,SQLite 中没有正式的日期类型。相反,日期仅存储为 TEXT。您正确地为您的日期文字使用了 ISO 格式,这是正确的,除了您没有用单引号将它们转义之外。