2

我正在研究一个 SQLite 数据库,它包含一个以 yyyy-MM-dd HH:mm:ss 格式存储值的列。现在我需要创建一个过滤器来选择带有过滤器的行作为这个日期时间列。询问:

Select * from tbl_locations where datetime >= '2013-09-11 00:00:00' and datetime <='2013-09-13 00:00:00'

尽管在此插槽中包含值,但上面的查询返回空集(我使用不带过滤器的 select 语句进行了验证。)

有什么建议我怎样才能获得所需的数据集?

4

2 回答 2

1

也许 SQLite 文档的这段摘录会对您有所帮助:

1.2 日期和时间数据类型

SQLite 没有为存储日期和/或时间预留存储类。相反,SQLite 的内置日期和时间函数能够将日期和时间存储为 TEXT、REAL 或 INTEGER 值:

  • TEXT 作为 ISO8601 字符串(“YYYY-MM-DD HH:MM:SS.SSS”)。
  • REAL 作为儒略日数字,根据预测的公历,自公元前 4714 年 11 月 24 日格林威治中午以来的天数。
  • INTEGER 作为 Unix 时间,自 1970-01-01 00:00:00 UTC 以来的秒数。

应用程序可以选择以任何这些格式存储日期和时间,并使用内置的日期和时间函数在格式之间自由转换。

您可以在 SQL 中用于构建查询的日期和时间函数记录在http://www.sqlite.org/lang_datefunc.html

于 2013-10-11T20:29:10.013 回答
0

好的,我在 MySQL 中对此进行了测试,但希望它会起作用。我有一个使用的表,timestamps并将列更改为 type text。然后我尝试了以下 SQL 查询并得到了与通常相同的结果(除了尾随小数)

SELECT  timestamp(stock_quote_timestamp) 
FROM    stock.stock_quote
WHERE   stock_quote_timestamp < timestamp('2013-10-07 11:05:30')#@high_date
AND     stock_quote_timestamp > timestamp('2013-10-03 14:09:03');#@low_date;

所以基本上,只需将您的text陈述转换为,timestamps以便它们正确比较。哦,你还需要说明你还在做什么SELECT,或者你可以做一个复合选择语句:SELECT *, timestamp(stock_quote_timestamp)...

于 2013-10-11T20:47:06.313 回答