选择在两个Unix时间戳之间的日期

4

我有一个名为users的表格。

列:

  • user_id - 整数
  • user_date - 整数(Unix时间戳)

一些行具有user_date,而另一些行则为NULL。

我需要找到所有user_date位于“2012-10-21”和“2012-10-24”之间的user_id。

2个回答

5
SELECT *
FROM users
WHERE user_date BETWEEN
  EXTRACT(EPOCH FROM date '2012-10-21') AND
  EXTRACT(EPOCH FROM date '2012-10-24' + interval '1 day');

如果您不想包括结束日期,那么请删除添加一天的部分。

1
为什么会有“+间隔1天”的内容?Postgres SQL在BETWEEN操作时是有不同的表现吗? - Yasiru G
2
@YasiruG 由于user_date字段是一个时间戳,如果在范围的结尾没有添加一天,那么它只会包括在结束日期的第一秒添加的用户。 - qqx

0
select *
from users
where 
    timestamp 'epoch' + user_date * interval '1 second' between '2012-10-21' and '2012-10-24' 
    and
    user_date is not null

2
小心那些隐式日期转换! - Colin 't Hart
2
看起来你想把两个参数都转换成整数,这样你就可以在 user_date 上使用索引了,对吗? - Mike Christensen

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