微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何比较sqlite TIMESTAMP值

我有一个sqlite数据库,其中我想选择TIMESTAMP列中的值在某个日期之前的行。我会认为这很简单,但我无法完成。我试过这个:

SELECT * FROM logged_event WHERE logged_event.CREATED_AT< '2010-05-28 16:20:55' 和它的各种变化,像日期功能一样。我已经读过http://sqlite.org/lang_datefunc.htmlhttp://www.sqlite.org/datatypes.html,我希望该列将是一个数字类型,并且比较将在unix时间戳值上完成。不可见谁能帮忙?如果重要,我正在sqlite Expert Personal中尝试。

编辑:

这里是表格描述:

CREATE TABLE [logged_event]
(
[id] INTEGER  NOT NULL PRIMARY KEY,[created_at] TIMESTAMP,[name] VARCHAR(64),[data] VARCHAR(512)
);

测试数据:

INSERT INTO table VALUES(1,'2010-05-28T15:36:56+0200','test','test');
INSERT INTO table VALUES(2,'2010-05-28T16:20:49+0200','test');
INSERT INTO table VALUES(3,'2010-05-28T16:20:51+0200','test');
INSERT INTO table VALUES(4,'2010-05-28T16:20:52+0200','test');
INSERT INTO table VALUES(5,'2010-05-28T16:20:53+0200','test');
INSERT INTO table VALUES(6,'2010-05-28T16:20:55+0200','test');
INSERT INTO table VALUES(7,'2010-05-28T16:20:57+0200','test');
问题是您将数据插入表中的方式:0200语法与 SQLite’s time formats中的任何一个不匹配:

> YYYY-MM-DD
> YYYY-MM-DD HH:MM
> YYYY-MM-DD HH:MM:SS
> YYYY-MM-DD HH:MM:SS.SSS
> YYYY-MM-DDTHH:MM
> YYYY-MM-DDTHH:MM:SS
> YYYY-MM-DDTHH:MM:SS.SSS
> HH:MM
> HH:MM:SS
> HH:MM:SS.SSS
>现在
> ddddddddDD

将其更改为使用SS.SSS格式正常工作:

sqlite> CREATE TABLE Foo (created_at TIMESTAMP);
sqlite> INSERT INTO Foo VALUES('2010-05-28T15:36:56+0200');
sqlite> SELECT * FROM Foo WHERE foo.created_at < '2010-05-28 16:20:55';
sqlite> SELECT * FROM Foo WHERE DATETIME(foo.created_at) < '2010-05-28 16:20:55';
sqlite> INSERT INTO Foo VALUES('2010-05-28T15:36:56.200');
sqlite> SELECT * FROM Foo WHERE DATETIME(foo.created_at) < '2010-05-28 16:20:55';
2010-05-28T15:36:56.200

如果绝对不能在插入时更改格式,则可能需要回到执行某些“聪明”并修改实际字符串(即用…替换等)。

(原答案)

您没有描述CREATED_AT列中包含什么样的数据。如果它确实是一个datetime,它会正确地比较一个字符串:

sqlite> SELECT DATETIME('Now');
2010-05-28 16:33:10
sqlite> SELECT DATETIME('Now') < '2011-01-01 00:00:00';
1

如果将其存储为unix时间戳,则需要调用DATETIME函数,将第二个参数设为“unixepoch”与字符串进行比较:

sqlite> SELECT DATETIME(0,'unixepoch');
1970-01-01 00:00:00
sqlite> SELECT DATETIME(0,'unixepoch') < '2010-01-01 00:00:00';
1
sqlite> SELECT DATETIME(0,'unixepoch') == DATETIME('1970-01-01 00:00:00');
1

如果这两个都没有解决您的问题(即使他们这样做),您应该始终发布一些数据,以便其他人可以重现您的问题。您甚至可以随时提出原始数据的一部分,仍然会再现问题。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


SQLite架构简单,又有Json计算能力,有时会承担Json文件/RESTful的计算功能,但SQLite不能直接解析Json文件/RESTful,需要用Java代码硬写,或借助第三方类库,最后再拼成insert语句插入数据表,代码非常繁琐,这里就不展示了。参考前面的代码可知,入库的过程比较麻烦,不能只用SQL,还要借助Java或命令行。SPL是现代的数据计算语言,属于简化的面向对象的语言风格,有对象的概念,可以用点号访问属性并进行多步骤计算,但没有继承重载这些内容,不算彻底的面向对象语言。...
使用Python操作内置数据库SQLite以及MySQL数据库。
破解微信数据库密码,用python导出微信聊天记录
(Unity)SQLite 是一个软件库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。SQLite 是在世界上最广泛部署的 SQL 数据库引擎。SQLite 源代码不受版权限制。本教程将告诉您如何使用 SQLite 编程,并让你迅速上手。.................................
安卓开发,利用SQLite实现登陆注册功能
相比大多数数据库而言,具有等优势,广泛应用于、等领域。
有时候,一个项目只有一个数据库,比如只有SQLite,或者MySQL数据库,那么我们只需要使用一个固定的数据库即可。但是一个项目如果写好了,有多个用户使用,但是多个用户使用不同的数据库,这个时候,我们就需要把软件设计成可以连接多个数据库的模式,用什么数据库,就配置什么数据库即可。4.Users实体类,这个实体类要和数据库一样的,形成一一对应的关系。11.Sqlite数据库,需要在代码里面创建数据库,建立表,再建立数据。8.我们开启MySQL数据库,然后进行调试,看程序的结果。2.安装SqlSugar。
基于Android的背单词软件,功能强大完整。
SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统。说白了就是使用起来轻便简单,