我在表格中有一个时间字段(HH:MM:SS),需要一个查询,将结果限制为时间字段超过3:00:00的所有记录
非常确定我需要以某种方式使用time()函数,但无论我尝试什么,我都会收到错误或错误的结果集。
select * from table where time_happens > '03:00:00'
...不会出错,但无效。
答案 0 :(得分:1)
您注意到有时可以在没有前导零的情况下存储这些值(例如1:00:12
)。这会产生问题。
SQLite没有特殊的日期/时间数据类型。它允许将日期/时间值存储在基本类型中,例如TEXT
(more 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 此外,您仍会在结果中获得未填充的值。