如何比较SQLite中的两个日期?
我假设它是一个字符串,所以我将它作为一个字符串进行比较,但毫不奇怪它失败了。我相信这就是Mysql的工作原理。我可能错了,因为我已经有一段时间没做了。在这两种情况下,如何检查SQLite中的日期是否相等?我将在WHERE子句中使用它如何比较SQLite中的两个日期?,sqlite,Sqlite,我假设它是一个字符串,所以我将它作为一个字符串进行比较,但毫不奇怪它失败了。我相信这就是Mysql的工作原理。我可能错了,因为我已经有一段时间没做了。在这两种情况下,如何检查SQLite中的日期是否相等?我将在WHERE子句中使用它 SELECT a._id, b._id, b.start_date,a.event_name, b.start_time, b.end_date, b.end_time, b.location FROM events_info b INNER JOIN event
SELECT a._id, b._id, b.start_date,a.event_name, b.start_time,
b.end_date, b.end_time, b.location FROM events_info b INNER JOIN events a ON
a._id=b.event_id WHERE b.start_time = '6:00';
(增加了空间以便于查看)来自:
1.2日期和时间数据类型
SQLite没有为存储日期和/或时间而预留的存储类。相反,SQLite的内置功能能够将日期和时间存储为文本、实数或整数值:
- 文本作为ISO8601字符串(“YYYY-MM-DD HH:MM:SS.SSS”)
- REAL作为朱利安日的数字,是指根据公历,从公元前4714年11月24日格林威治中午开始的天数
- 整数作为Unix时间,自UTC 1970-01-01 00:00:00以来的秒数
SQLite没有专用的日期时间类型。通常人们要做的是确保他们将日期存储为一致的格式化字符串;例如,YYYY-MM-DD hh:MM:ss。如果您这样做,只要您保持一致,就可以直接比较日期:
SELECT * FROM a WHERE q_date < '2013-01-01 00:00:00';
将使用索引来磨练日期/时间,而不必进行完整的表扫描。或者,如果它们位于两个单独的行中:
SELECT * FROM a WHERE q_date = '2012-06-04' AND q_time = '05:06:00';
关键是确保日期和时间以一致的格式进入数据库。为了便于用户演示,请在客户端而不是数据库中执行所有转换。(例如,将“2012-06-04 05:06:00”转换为“2012年4月6日凌晨1:06东部”。)
如果这还不能回答这个问题,您可以发布您用于存储日期和时间的确切格式,以及您尝试比较的两个示例日期,它们没有按照您期望的方式工作吗?Sqlite无法直接比较日期。我们需要在几秒钟内将它们转换为整数 范例
SELECT * FROM Table
WHERE
CAST(strftime('%s', date_field) AS integer) <=CAST(strftime('%s', '2015-01-01') AS integer) ;
从表中选择*
哪里
强制转换(strftime('%s',date_字段)为整数)您应该发布“不工作”代码。我看不出有什么意义,因为我是100%正的。时间/日期比较是问题所在。但如果有那么重要的话,我很乐意效劳。很抱歉。你说的“比较两个日期”是指“比较一天中的两个时间”,对吗?是的,先生。没有时间,比如分开,所以YYYY-MM-DD和HH:MM,但是你决定帮助我的任何一种方式都是好的。这是真的。但是在数据库lol中保留类型有什么意义呢?它只是让我感到困惑,因为它允许人们创建日期和时间列,但是当比较它们时,它失败了。但我可以做一个文本栏。谢谢。老实说,答案是便携性。这样,如果您正从SQLite迁移到[其他一些DB系统]或反之亦然,则不必重写所有查询。或者至少,这容易多了。谢谢。您保存了我的一天:)我的工作代码:-从LogDetail中选择*时间详情>'2014-06-18 23:13:00';
SELECT * FROM a WHERE q_date = '2012-06-04' AND q_time = '05:06:00';
SELECT * FROM Table
WHERE
CAST(strftime('%s', date_field) AS integer) <=CAST(strftime('%s', '2015-01-01') AS integer) ;