我试图在给定时间后选择所有时间:
SELECT created FROM table WHERE created >= '2014-11-11 00:00:00';
但我得到的结果包括:
2014-11-6
2014-11-3
ect..
这促使我做了一些困扰我的测试:
SELECT '2014-11-11' < '2014-11-3';
1
sqlite> SELECT DATETIME('2014-11-11') < '2014-11-3';
1
sqlite> SELECT DATETIME('2014-11-11') < '2014-11-03';
0
sqlite> SELECT DATETIME('2014-11-11') < DATETIME('2014-11-3');
;;no result
似乎sqlite无法比较两个日期时间并使用任何其他组合导致两个字符串被比较,这不是我想要的。这引出了我的问题:
sqlite3如何表现'时间戳'以及如何正确地存储和比较它们以使它们表现得像预期的那样?
我正在使用带有sqlite3 3.8.2 2013-12-06 14:53:30
答案 0 :(得分:2)
SQLite中没有timestamp
类型。因此,所有测试都是字符串比较:DATETIME('2014-11-11')
返回2014-11-11 00:00:00
,DATETIME('2014-11-3')
返回null
,因为2014-11-3
不是DATETIME
的格式明白。您的上一个案例返回null
,但不是no result
如果您希望SQLite正确地比较您的时间戳,那么您应该以可排序的格式存储它们:2014-11-03
而不是2014-11-3
。如果你想使用SQLite date and time functions,那应该是他们理解的格式。