以下是我的表中的相关列,每行代表下面的一列。
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} }?
答案 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';
你甚至不需要担心时区!