编写一个 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 格式,这是正确的,除了您没有用单引号将它们转义之外。
我有一个包含 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 格式,这是正确的,除了您没有用单引号将它们转义之外。