sql - 根据时区和当前服务器时间获取时差

标签 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 和服务器上的当前时间之间的时间差,分别到时区

最佳答案

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

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/

相关文章:

mysql - 由于使用了错误的 INDEX,GROUP BY 查询缓慢

sql - 使用全文搜索查找完全匹配

sql - 在 Oracle sql 中选择带有子查询的随机记录

sql - 使用 Group By 从多个表中获取数据

oracle - PostgreSQL 到 Oracle DDL

sql - 根据多个条件创建带有附加列的 View

sql - t-sql创建用户并授予存储过程的执行权限

MySQL 报告 - 编辑器

sql - 使用 PostgreSQL 按 3 列检查数据的唯一性

sql - 计算两个总数的运行比率