类似查询的不同结果取决于 sqlite3 中日期字符串的格式

Different results for a similar queries depends on format of date string in sqlite3

我在 sqlite3 中有两个 table:

sqlite> create table date_1 (date text);
sqlite> create table date_2 (date text);

每个 table 包含三行不同格式的日期:

sqlite> select * from date_1;
28.09.2015
28.08.2015
29.08.2015
sqlite> select * from date_2;
2015-09-28
2015-08-28
2015-08-29

我现在的日期是:

sqlite> select date('now');
2015-09-29

为什么我对下一个类似的查询有不同的结果?

sqlite> select * from date_1 where date < strftime('%d.%m.%Y', 'now', '-1 day');
28.08.2015
sqlite> select * from date_2 where date < strftime('%Y-%m-%d', 'now', '-1 day');
2015-08-28
2015-08-29

为什么第一次查询不 returns '29.08.2015' 呢?

SQLite has no date type. When you do date < strftime(...) you're doing a string comparison. The ISO 8601 日期格式如 2015-08-28 将作为字符串进行比较时作为日期进行比较。 28.08.2015不会,会先称日,再称月,再称年。

strftime 只能理解一组有限的格式(参见 "Time Strings") and 28.09.2015 isn't one of them. Either store all dates in ISO 8601 format, or follow the answers to this question cover how to compare dates in SQLite.