SQLite查询日期等于今天的记录

11
如何查询数据库中时间等于'今天'的记录。我的日期储存在long类型列中。
例如: 列名为 DateColumn,表名为 MyTable 1360054701278 (2013年2月5日星期二上午8:58:21 GMT) 1359795295000 (2013年2月2日星期六上午8:54:55 GMT)
因此,为了检索出第一条记录(因为它是与今天相等的日期),应如何进行查询?
感谢任何建议。

"... WHERE date(yourdatetimecolumn) = date('now') "不再起作用了吗?编辑:在您的情况下,将奇怪的长时间戳(?)转换回日期时间。 - Najzero
我已经尝试过了,但是什么也没得到... - Laura
SELECT DATE(datetime(yourcolumnname, 'unixepoch')) FROM yourtable 给你什么结果? - Najzero
请发布您的答案以接受它 :) 再次感谢 :D - Laura
时间跨度的比较最好使用“半开放”方法,即开始时间包含在内,结束时间不包含在内。请参见我在类似问题上的回答以获取讨论和示例。 - Basil Bourque
显示剩余4条评论
2个回答

13

抱歉没有注意到,你的问题出在列中保存的额外毫秒。

解决方法是通过除法去除它们;-)

SELECT * FROM MyTable WHERE date(datetime(DateColumn / 1000 , 'unixepoch')) = date('now') 

最后一个问题:):在数据库中将日期存储为毫秒级是否有问题?哪种方式最佳实践? - Laura

2

使用范围查询可以获得最快的查询速度。你需要避免转换来进行比较。

SELECT *
FROM   My Table
WHERE  DateColumn BETWEEN JulianDay('now') AND JulianDay('now','+1 day','-0.001 second')

注意:我刚意识到你的日期并非儒略日,而SQLite原生支持儒略日。概念仍然相同,但你需要为你存储日期的任何格式使用自己的转换函数。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接