我正在使用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')
答案 0 :(得分:1)
您使用的是MySQL语法,但SQLite不支持它。没有NOW()
函数,也没有日期添加功能。您必须使用date modifiers。
尝试:
SELECT DATETIME('NOW', '-1 MINUTE');
或
DELETE ... WHERE ts < DATETIME('NOW', '-1 MINUTE');