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”。)
如果这不能回答问题,您能否发布您用于存储日期和时间的确切格式,以及您试图比较但未按您期望的方式工作的两个示例日期?