在 SQLite 中选择日期大于或等于今天的位置

MMc*_*McK 10 sqlite android android-sqlite android-studio

我将日期以某种dd/mm/yyyy格式存储在我的数据库中,我希望只显示日期等于或大于今天的项目。

我试过 WHEREdate(fixtures.date) >= date('now')但没有结果。

以下是我的查询,任何帮助将不胜感激

SELECT fixtures.id, 
       fixtures.team_1_id, 
       fixtures.team_2_id, 
       fixtures.date, 
       fixtures.time, 
       fixtures.pitch, 
       teams.team_name, 
       teams_1.team_name AS awayTeam, 
       leagues.league_name 
FROM   fixtures 
       INNER JOIN teams 
               ON fixtures.team_1_id = teams.id 
       INNER JOIN teams AS teams_1 
               ON fixtures.team_2_id = teams_1.id 
       INNER JOIN teams_vs_leagues 
               ON teams.id = teams_vs_leagues.team_id 
       INNER JOIN leagues 
               ON teams_vs_leagues.league_id = leagues.id 
WHERE  date(fixtures.date) >= date('now') 
ORDER  BY fixtures.date DESC 
Run Code Online (Sandbox Code Playgroud)

ing*_*vin 12

为什么你说你的日期以 dd/mm/yyyy 格式存储?根据SQLite 文档

1.2 日期和时间数据类型

SQLite 没有专门用于存储日期和/或时间的存储类。相反,SQLite 的内置日期和时间函数能够将日期和时间存储为 TEXT、REAL 或 INTEGER 值:

  1. TEXT 作为 ISO8601 字符串(“YYYY-MM-DD HH:MM:SS.SSS”)。

  2. REAL 作为儒略日数,根据预测的格里高利历,自公元前 4714 年 11 月 24 日格林威治中午以来的天数。

  3. INTEGER 作为 Unix 时间,自 1970-01-01 00:00:00 UTC 以来的秒数。

应用程序可以选择以任何这些格式存储日期和时间,并使用内置的日期和时间函数在格式之间自由转换。

基本上这个查询不起作用

select 1 where '01-08-2016' >= date('now')
Run Code Online (Sandbox Code Playgroud)

但这会

select 1 where '2016-08-01'>= date('now')
Run Code Online (Sandbox Code Playgroud)

那么您能否验证您的日期fixtures.date格式是否为“yyyy-MM-dd”,否则您的查询将不起作用。另外记得使用date('now', 'localtime')来获取您的本地时间。

如果您的日期格式正确,您可以尝试执行以下操作

SELECT fixtures.id
FROM   fixtures
WHERE  fixtures.date >= date('now')
Run Code Online (Sandbox Code Playgroud)

如果你确实得到了这个结果,那么连接不匹配任何行。

有关更多信息,您可以查看此答案