类似查询的不同结果取决于 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.
我在 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.