PostgreSQL组由epoch月组成

时间:2017-05-15 06:04:22

标签: sql postgresql epoch

我获得了大量使用纪元时间的行。 id,customerid,orderid,uxtime

现在我的桌面上是建立一个管理页面,允许其他人快速浏览这一大堆行。

他们希望能够选择年份和月份并获得该月份列表。

这意味着:选择2016年和4月应从4月16日返回所有ID。

这可以在一个聪明的酷sql句子中完成。这就是你进来的地方。我正在努力并取得一些进展,但我很确定你们所有人都比我快得多。 :)

1 个答案:

答案 0 :(得分:1)

要将“2016年4月”转换为使用make_date()extract()

的unix纪元
extract(epoch from make_date(2016,4,1))

你还需要一个where子句的上限,这通常是下个月的第一个:

extract(epoch from make_date(2016,4,1) + interval '1' month)

所以你的SQL语句会是这样的:

select ...
from ...
where uxtime >= extract(epoch from make_date(2016,4,1))
  and uxtime < extract(epoch from make_date(2016,4,1) + interval '1' month);

稍微简短的写作方式是:

select ...
from ...
where to_char(to_timestamp(uxtime), 'yyyy-mm') = '2016-04'

然而,上面的第一个解决方案会慢一点很多,因为它无法在uxtime上使用索引

如果您真的更喜欢该解决方案来加速查询,可以to_char(to_timestamp(uxtime), 'yyyy-mm')上创建索引。