sqlite3 比较时间(字符串)的行为
sqlite3 behavior comparing time(string)s
我正在尝试在给定时间后一直select:
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 如何对待 'timestamps' 以及如何正确地存储和比较它们以便它们表现得像人们期望的那样?
我正在使用 Ubuntu Linux 14.04 和 sqlite3 3.8.2 2013-12-06 14:53:30
SQLite 中没有 timestamp
类型。所以,你所有的测试都是字符串比较:DATETIME('2014-11-11')
returns 2014-11-11 00:00:00
, and DATETIME('2014-11-3')
returns null
since 2014-11-3
不是 DATETIME
理解的格式。您的最后一个案例 return null
,但不是 no result
.
如果你想 SQLite 正确比较你的时间戳,那么你应该以可排序的格式存储它们:2014-11-03
而不是 2014-11-3
。如果你想使用 SQLite date and time functions,那应该是他们理解的格式。
我正在尝试在给定时间后一直select:
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 如何对待 'timestamps' 以及如何正确地存储和比较它们以便它们表现得像人们期望的那样?
我正在使用 Ubuntu Linux 14.04 和 sqlite3 3.8.2 2013-12-06 14:53:30
SQLite 中没有 timestamp
类型。所以,你所有的测试都是字符串比较:DATETIME('2014-11-11')
returns 2014-11-11 00:00:00
, and DATETIME('2014-11-3')
returns null
since 2014-11-3
不是 DATETIME
理解的格式。您的最后一个案例 return null
,但不是 no result
.
如果你想 SQLite 正确比较你的时间戳,那么你应该以可排序的格式存储它们:2014-11-03
而不是 2014-11-3
。如果你想使用 SQLite date and time functions,那应该是他们理解的格式。