在给定时区中按日期汇总时间戳记值

时间:2018-11-26 23:37:26

标签: postgresql datetime timezone timestamp

publishedtimestamp with time zone存储为UTC。 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中发生的所有时间在CST 00:00:00到23:59:59 CST之间,或在EST中发生的所有事情都在EST 00:00:00到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

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

1 个答案:

答案 0 :(得分:1)

  

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

如果在“本地时区”中表示用户提供的“ CST”,请使用:

ServiceHost

代替

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

如果先转换为pp.Published::date AT TIME ZONE 'CST' As DayOf,则将获得当前会话(date)的timezone设置所定义的日期。下面的show timezone;构造首先将给定的AT TIME ZONE值强制转换为timestamptz (timestamp with time zone),代表当前date设置的给定日期的00:00,然后计算相应的{ {1}}在给定的时区('CST')-不是您想要的。

相关: