以下是我表格中的相关列,每一行代表下面的一列。
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
和服务器上的当前时间之间的时间差,分别到时区
?
最佳答案
如果您可以容忍两个单独的查询,您可以先查找用户的时区,然后执行此操作:
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';
在这里您甚至不需要担心时区问题!
关于sql - 根据时区和当前服务器时间获取时差,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35953600/