我认为它是一个字符串,所以我将它作为一个字符串进行比较,但不足为奇,它失败了。我相信它在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';
(增加空间以便于查看)
答案 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')