Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何比较SQLite中的两个日期?_Sqlite - Fatal编程技术网

如何比较SQLite中的两个日期?

如何比较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

我假设它是一个字符串,所以我将它作为一个字符串进行比较,但毫不奇怪它失败了。我相信这就是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 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以来的秒数
应用程序可以选择以其中任何一种格式存储日期和时间,并使用内置的日期和时间函数在格式之间自由转换

如果您查看中的示例,类似这样的内容应该会让您接近您想要的内容(我假设是当天的6: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) ;