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”转换为“Eastern时间6/4/2012上午1:06”)。
如果这不能解答您的问题,请提供您存储日期和时间使用的确切格式以及两个示例日期,这些日期的比较结果与您期望的不同。