我们假设我的表格有两个TIMESTAMPTZ
列 - start_time
和end_time
。
在我的JS代码中,我将使用momentjs创建起点和终点,并且我希望找到{{1}的所有行的所有时差(end_time - start_time
)的所有总和无论每条记录上的时区如何,这两点之间。
通常,如果表中的所有记录都使用相同的时区(例如UTC),我会做类似的事情:
end_time
但我不确定如何在考虑不同的时区时如何实现这一目标。主要担心的是我不想因为他们处于不同的时间而意外遗漏了几行区域比我的开始/结束点。
答案 0 :(得分:1)
在您附加实现所需过滤器的WHERE
子句后,您的查询有效 :
表示这两点之间
end_time
的所有记录
SELECT sum(EXTRACT(epoch from (end_time - start_time) / 3600)) as hours_used
FROM tbl
WHERE end_time BETWEEN $momentjs_start AND $momentjs_end;
$momentjs_start
和$momentjs_end
是您创建的起点和终点,也应该是timestamptz
。 (对于timestamp
值,会话转换中假定会话的当前时区)。 BETWEEN
包括下限和上限,顺便说一句。
您的困惑可能是由于SQL标准委员会定义的数据类型timestamp with time zone
(= timestamptz
)的不幸名称 造成的。它实际上并不存储任何时区信息。 timestamptz
文字中的时区偏移,缩写或名称仅用作输入/输出修改器以调整时区。在内部,存储纯UTC时间戳。所以你的计算工作原样。
所以,这是给定的,自动:
无论每条记录的时区如何。
相关: