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

时间:2012-06-04 03:46:19

标签: 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 events a ON
 a._id=b.event_id WHERE b.start_time = '6:00';

(增加空间以便于查看)

3 个答案:

答案 0 :(得分:31)

SQLite没有专用的DATETIME类型。通常人们做的是确保将日期存储为一致的格式化字符串;例如,YYYY-MM-DD hh:mm:ss。如果您这样做,只要您保持一致,那么您可以直接比较日期:

SELECT * FROM a WHERE q_date < '2013-01-01 00:00:00';

这是有效的,因为即使比较在技术上是按字母顺序比较而不是数字比较,也可以按照字母顺序和数字顺序排列一致的格式。

对于这样的架构,我建议以24小时格式存储日期(上面的例子是午夜)。用零填充月,日和小时。如果您的日期将跨越多个时区,请将它们全部存储在UTC中并执行客户端所需的任何转换,以将其转换为本地时区。

通常,日期和时间都存储在一列中。如果您因任何原因必须将它们分开,只需确保日期一致并且您的时间都是一致的。例如,日期应该都是YYYY-MM-DD,时间应该都是hh:mm:ss。

YYYY-MM-DD hh:mm:ss是首选​​格式的原因是因为从最大日期间隔(年)到最小(秒)时,您可以非常轻松地对它们进行索引和排序高绩效。

SELECT * FROM a WHERE q_date = '2012-06-04 05:06:00';

将使用索引来磨练日期/时间,而不必进行全表扫描。或者如果它们分成两行:

SELECT * FROM a WHERE q_date = '2012-06-04' AND q_time = '05:06:00';

关键是要确保日期和时间以一致的格式进入数据库。对于用户友好的演示,请在客户端进行所有转换,而不是在数据库中进行。 (例如,将'2012-06-04 05:06:00'转换为“东部2012年6月4日上午1:06”。)

如果这不回答问题,您能否发布您用于存储日期和时间的确切格式,以及您尝试比较的两个示例日期,这些日期与您预期的方式不同他们到?

答案 1 :(得分:3)

Sqlite无法直接比较日期。我们需要在几秒钟内转换它们以及整数。

实施例

<div class="clip-wrap small">
  <img src="http://leisureleaguesfranchise.com/wp-content/uploads/2014/09/football2.jpg" alt="demo-clip-path" class="clip-polygon">
</div>

<div class="clip-wrap large">
  <img src="http://leisureleaguesfranchise.com/wp-content/uploads/2014/09/football2.jpg" alt="demo-clip-path" class="clip-polygon">
</div>

答案 2 :(得分:2)

来自Datatypes In SQLite Version 3

  

1。2日期和时间数据类型

     

SQLite没有预留用于存储日期和/或时间的存储类。相反,SQLite的内置Date And Time Functions能够将日期和时间存储为TEXT,REAL或INTEGER值:

     
      
  • TEXT 为ISO8601字符串(“YYYY-MM-DD HH:MM:SS.SSS”)。
  •   
  • REAL 作为朱利安日数,是公元前4714年11月24日格林威治中午以来的天数。根据预感格里高利历。
  •   
  • INTEGER as Unix Time,自1970-01-01 00:00:00 UTC以来的秒数。
  •   
     

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

如果你看一下Date And Time Functions中的例子,这样的话可以让你接近你想要的东西(我假设,这是当天的6点):

WHERE b.start_time = date('now', 'start of day', '+6 hours')
相关问题