我假设它是一个字符串,所以我将其作为字符串进行比较,但毫不奇怪它失败了。我相信这就是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';(添加了空间以使其更易于查看)
发布于 2012-06-04 13:09:49
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‘转换为“东部时间1:06/4/2012”。)
如果这不能回答问题,你可以发布你用来存储日期和时间的确切格式,以及你试图比较的两个没有按照你预期的方式工作的示例日期吗?
发布于 2015-09-08 20:05:12
Sqlite不能直接比较日期。我们需要将它们转换为秒和整数。
示例
SELECT * FROM Table
WHERE
CAST(strftime('%s', date_field) AS integer) <=CAST(strftime('%s', '2015-01-01') AS integer) ;发布于 2012-06-04 12:09:14
来自Datatypes In SQLite Version 3
1.2日期和时间数据类型
SQLite没有为存储日期和/或时间而预留的存储类。相反,SQLite的内置Date And Time Functions能够将日期和时间存储为文本、实数或整数值:
应用程序可以选择以这些格式中的任何一种格式存储日期和时间,并使用内置的日期和时间函数在格式之间自由转换。
如果您查看Date And Time Functions中的示例,就会发现类似这样的内容会让您更接近您想要的内容(我假设是当天的6:00 ):
WHERE b.start_time = date('now', 'start of day', '+6 hours')https://stackoverflow.com/questions/10876105
复制相似问题