4

我的 postresql 数据库中的查询有问题。我试图在某个日期时间之后获取最后 100 条日志,但是当我使用此查询时:

select * from log_entry WHERE array['MESSAGE'] && tags AND CAST(last_updated AS DATE) >= '2013-02-28T16:47:26.394213' ORDER BY last_updated DESC LIMIT 100

这里 last_updated 列的类型是:timestamp without time zone

有时我会从 '2013-02-28T16:47:26.394213' 之前获取日志,我做错了什么吗?有没有更好的方法来代替使用强制转换?

提前致谢!

4

2 回答 2

4

(应要求从评论中重新发布。)

好吧,这就是您的问题:当您将时间戳(带或不带时区)转换为日期时,您会截断时间戳的时间部分。为什么不'2013-02-28T16:47:26.394213'转换为时间戳并直接与它进行比较last_updated

select * from log_entry 
WHERE array['MESSAGE'] && tags 
AND last_updated 
  >= '2013-02-28T16:47:26.394213'::timestamp without time zone
ORDER BY last_updated DESC LIMIT 100
于 2013-02-28T17:30:00.003 回答
0

使用这个。这应该工作。

select * from log_entry WHERE array['MESSAGE'] && tags AND age(last_updated)

= age(now()) 按 last_updated DESC LIMIT 100 排序

于 2017-02-12T23:06:50.343 回答