首页 > 解决方案 > 按给定时区中的相应日期聚合时间戳值

问题描述

published存储为timestamp with time zoneUTC。
gps_coordinatesgeography(Point,4326)

SELECT
    ST_MakeLine(pp.Gps_Coordinates::geometry ORDER BY pp.Published) As DailyRoute,
    pp.Published::date As DayOf
FROM xxxx As pp
WHERE pp.Id = 'xxxxxxxx'
GROUP BY DayOf

我正在尝试按天获取 ID 的所有数据,但在请求它的人的时区中,所以如果在 CST 中发生的所有事情都发生在 00:00:00 CST 和 23:59:59 CST 之间,或者如果在EST 在 00:00:00 EST 和 23:59:59 EST 之间发生的一切。

使用此信息重新处理此查询以获取数据的最佳方法是什么?

当我尝试时:

SELECT
    ST_MakeLine(pp.Gps_Coordinates::geometry ORDER BY pp.Published) As DailyRoute,
    pp.Published::date AT TIME ZONE 'CST'  As DayOf
FROM xxxx As pp
WHERE pp.Id = 'xxxxxxxx'
GROUP BY DayOf

结果的2018-11-25 18:00:00那一天,这不是我想要的。我想根据当地时区的一天中的时间对白天的所有内容进行分组。

标签: postgresqldatetimetimezonetimestamp

解决方案


我想根据当地时区的一天中的时间对白天的所有内容进行分组。

如果“本地时区”是指用户提供的“CST”,则使用:

(pp.Published AT TIME ZONE 'CST')::date AS DayOf

代替

pp.Published::date AT TIME ZONE 'CST' As DayOf

如果您转换为first,您将获得当前会话 ( ) 设置date所定义的日期。以下构造首先将给定值强制为( )表示当前设置的给定日期,然后计算给定时区 ('CST') 的相应值 -而不是您想要的。timezoneshow timezone;AT TIME ZONEdatetimestamptztimestamp with time zone00:00timezonetimestamp without time zone

有关的:


推荐阅读