SQLite比较时间值

时间:2015-02-26 00:45:41

标签: sqlite

我在表格中有一个时间字段(HH:MM:SS),需要一个查询,将结果限制为时间字段超过3:00:00的所有记录

非常确定我需要以某种方式使用time()函数,但无论我尝试什么,我都会收到错误或错误的结果集。

select * from table where time_happens > '03:00:00' 

...不会出错,但无效。

1 个答案:

答案 0 :(得分:1)

您注意到有时可以在没有前导零的情况下存储这些值(例如1:00:12)。这会产生问题。

SQLite没有特殊的日期/时间数据类型。它允许将日期/时间值存储在基本类型中,例如TEXTmore info),但是它希望它们只在predefined formats之一。列表中有HH:MM:SS,但没有H:MM:SS,因此即使您使用了某些日期/时间函数,它也永远无法理解您的值:

sqlite> SELECT TIME('12:34:56');
12:34:56
sqlite> SELECT TIME('2:34:56');
 

但实际上你并不需要让SQLite在这里理解你的价值观。如果你正确填充它们(在UPDATE时插入,或在SELECT期间动态填充),它甚至可以在不使用任何函数的情况下工作,因为纯字符串比较就足够了:

SELECT * FROM table WHERE SUBSTR('0'||time_happens,-8,8) > '03:00:00';

注意我需要使用SQLite padding workaround 此外,您仍会在结果中获得未填充的值。