如何根据时间戳删除mysql数据?

时间:2017-05-15 20:54:24

标签: mysql

我正在使用System.Data.SqlLite.dll lite版本1.0.105.0

我有一个非常简单的MySQL数据库。

我使用以下内容在数据库中创建一个表:

CREATE TABLE SessionInfo (session nvarchar(100), state nvarchar(25), ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP)

我(成功)向表中添加数据:

INSERT INTO SessionInfo (session, state) VALUES ('test', '1')

当我尝试使用以下语句从表中清除数据时:

DELETE FROM SessionInfo WHERE ts < ADDDATE( NOW(), INTERVAL -1 MINUTE )

(我也尝试了以下内容)

DELETE FROM SessionInfo WHERE ts < CURRENT_TIMESTAMP - interval '1' minute
DELETE FROM SessionInfo WHERE ts < DATE_SUB(NOW(), INTERVAL 1 MINUTE)

在所有情况下,我都会收到此错误:

System.Data.SQLite.SQLiteException was unhandled
ErrorCode=1
HResult=-2147467259
Message=SQL logic error or missing database
near "MINUTE": syntax error
Source=System.Data.SQLite

当我尝试其中任何一个时:

DELETE FROM SessionInfo WHERE ts < NOW() - INTERVAL 1 MINUTE
DELETE FROM SessionInfo WHERE ts < NOW() - INTERVAL '1' MINUTE

我收到此错误:

System.Data.SQLite.SQLiteException was unhandled
ErrorCode=1
HResult=-2147467259
Message=SQL logic error or missing database
near "'1'": syntax error
Source=System.Data.SQLite

我尝试在UNIX_TIMESTAMP宏中包装时间戳...

DELETE FROM SessionInfo WHERE UNIX_TIMESTAMP(ts) < 
UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 1 MINUTE))

仍然是同样的错误:

System.Data.SQLite.SQLiteException was unhandled
ErrorCode=1
HResult=-2147467259
Message=SQL logic error or missing database
near "1": syntax error
Source=System.Data.SQLite

我尝试在时间戳之间删除记录:

DELETE FROM SessionInfo WHERE ts between now() - interval 1 hour and now()

我仍然得到相同的结果:

System.Data.SQLite.SQLiteException was unhandled
ErrorCode=1
HResult=-2147467259
Message=SQL logic error or missing database
near "1": syntax error

所以,我刚尝试过这个:

DELETE FROM SessionInfo WHERE ts < CURRENT_TIMESTAMP

我的所有记录都被删除了......所以我知道我可以删除...而不是我要删除的内容

感谢LSerni,这是我的工作代码: (注意:我正在使用分钟进行测试......但实际代码将在几天内完成)

DELETE FROM SessionInfo WHERE ts < DATETIME('NOW', '-7 DAY')

1 个答案:

答案 0 :(得分:1)

您使用的是MySQL语法,但SQLite不支持它。没有NOW()函数,也没有日期添加功能。您必须使用date modifiers

尝试:

 SELECT DATETIME('NOW', '-1 MINUTE');

 DELETE ... WHERE ts < DATETIME('NOW', '-1 MINUTE');