根据时区和当前的时间来获取时差

时间:2016-03-12 04:04:23

标签: sql postgresql

以下是我的表中的相关列,每行代表下面的一列。

COLUMN username character varying(100);
COLUMN started_using_at timestamp with time zone;
COLUMN timezone text;

时区列包含如下数据

America/New_York
America/Chicago
etc....

如何创建一个查询,当在where子句中传递username时,我可以得到started_using_at与服务器上当前时间之间的时差,相应于{{1} }?

1 个答案:

答案 0 :(得分:1)

如果您可以容忍两个单独的查询,则可以先查找用户的时区,然后执行以下操作:

SET timezone='America/New_York';
SELECT NOW() - started_using_at FROM t WHERE username = 'fred';

不幸的是,这是一个语法错误:

SET timezone=(SELECT timezone FROM t WHERE username = 'fred');

但是:请注意,NOW()started_using_at都是瞬间。在内部,它们只是作为纪元以来的秒存储。时区只对您进行字符串化或决定它们属于哪一天时才有意义。所以无论用户的时区如何,这都应该给你相同的结果:

SELECT NOW() - started_using_at FROM t WHERE username = 'fred';

你甚至不需要担心时区!