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:06am Eastern 6/4/2012”。)
如果这不能回答问题,您能否发布您用于存储日期和时间的确切格式,以及您尝试比较的两个示例日期,这些日期和您期望的方式不同?