SQLite where语句对datetime字段无效

syqv5f0l  于 8个月前  发布在  SQLite
关注(0)|答案(1)|浏览(91)

我有一个SQLite数据库,它使用一个名为DateTime的字段。在代码中,我使用DateTime.Now,所以这不仅仅是一个基本日期,它总是记录输入的当前时间。
当我尝试运行SQL语句时,它看起来像:

SELECT 
* 
FROM Tournament 
WHERE DateTime >= '8/1/2023 12:00:00 AM' AND DateTime <= '8/31/2023 11:59:59 PM'

就是这张table

CREATE TABLE IF NOT EXISTS Tournament (
       Id TEXT PRIMARY KEY NOT NULL,
       Name TEXT,
       SiteId Text,
       DateTime Text NOT NULL,
       BuyIn REAL NOT NULL,
       Staking REAL NOT NULL,
       IsRebuy BOOLEAN NOT NULL,
       RebuyCount INTEGER,
       IsDeal BOOLEAN NOT NULL,
       IsAddOn BOOLEAN NOT NULL,
       FOREIGN KEY (SiteId) REFERENCES Site(Id)
 );

它得到0个结果,但是当我Select * From Tournament时,我得到1个记录,其中字段DateTime2023-08-27 09:19:32.7331808
有人能帮我解答这个问题吗?

e5nszbig

e5nszbig1#

使用ISO 601格式,不仅仅是SQLite,而是任何数据库和语言。

WHERE DateTime >= '2023-08-01' AND DateTime < '2023-09-01'

几乎所有的语言和数据库都有明确的日期类型,并自动识别ISO 8601格式 ,SQLite 除外。在SQLite中,以文本形式存储的日期应遵循ISO 8601格式。
From the Data Types docs
SQLite没有专门用于存储日期和/或时间的存储类。相反,SQLite的内置日期和时间函数能够将日期和时间存储为TEXT,真实的或INTEGER值:

  • 文本为ISO 8601字符串(“YYYY-MM-DD HH:MM:SS.SSS”)。
  • 儒略日数,即从公元前4714年11月24日格林威治正午开始的天数。根据阳历。
  • INTEGER表示Unix时间,自1970-01-01 00:00:00 UTC以来的秒数。

应用程序可以选择以任何这些格式存储日期和时间,并使用built-in date and time functions在格式之间自由转换。

相关问题