在PostgreSQL中,我们可以直接比较两个带有不同时区的时间戳吗?

埃里克·赫
SELECT * FROM table_a 
WHERE time_1 >= to_timestamp('11/01/2014 10:00 PDT', 'MM/DD/YYYY HH24:MI TZ')

time_1是UTC时区,它是带有时区的时间戳。那么,这会给我我想要的东西还是我需要在to_timestamp()函数中执行精确的UTC时间?

菲利普·库林

Postgresql有两种不同的时间戳数据类型,并且在何时使用哪一种令人困惑。这两种类型是:

  • timestamp(也称为timestamp without time zone),很可能是table_a中的类型
  • timestamp with time zone这是to_timestamp()返回的数据类型

您必须确保将苹果与苹果或成对配对而不是将它们混合在一起,否则可能会得到不希望的结果。

如果您table_a.time_1是a,timestamp with time zone那么您在问题中提供的代码将可以正常工作。

如果您table_a.time_1是a,timestamp则需要更改代码:

SELECT * 
  FROM table_a 
 WHERE time_1 >= to_timestamp('11/01/2014 10:00 PDT', 'MM/DD/YYYY HH24:MI TZ') at time zone 'utc';

此(at time zone 'utc'的最后一部分将剥离指定的时间戳记中的时区(PDT),并将时间戳记转换为UTC。


编辑:以帮助您在此答案中的评论...

为了了解如何翻译时区,您需要了解两种形式的时间戳之间的区别。很清楚为什么您需要在下面理解这一点。正如我上面指出的那样,两种形式的时间戳之间的差异令人困惑。有一个很好的手册页,但现在继续阅读。

要了解的主要内容是,两个版本都没有实际存储时区(尽管有名称)。如果添加了额外的单词“ translation”,则命名会更有意义考虑“没有时区转换的时间戳“有时区转换的时间戳”

一个timestamp with time zone 翻译完全不存储时区。它旨在存储可能来自世界任何地方的时间戳记,并且对其含义不加赘述。因此,在输入一个时,您必须提供它来自的时区,否则postgresql将假定它来自您当前会话的时区PostgreSQL自动将其从给定的时区转换为服务器的内部时区。您不需要知道哪个时区,因为在给您赋值之前,postgresql始终会将其从该内部时区转换回去。当您获取值(例如SELECT my_time FROM foo:)时,PostgreSQL将时间戳转换为当前会话的时区。或者,您可以指定要转换成的时区(例如:)SELECT my_time AT TIME ZONE 'PDT' FROM foo

考虑到这一点,您将更容易理解,从指定的时间开始timestamp 无时区转换将永远不会改变。即使您在美国表示11岁,在英国表示12岁,Postgresql也会被视为11:00:00已经发生12:00:00很容易看出为什么这可能不是您想要的。

一个非常常见的编程错误是认为atimestamp with time zone在特定时区。不是。无论您要在哪个时区。而且,如果您未指定所需的时区,则postgresql会假设您希望在当前会话时区使用。

你说,你的领域是timestamp with time zone它们都在UTC从技术上讲这是不正确的。您的会话时区很可能是UTC,因此postgresql会为您提供UTC中的所有内容。

因此,您有一个timestamp with time zone,您想知道PDT中的这些时间吗?容易:SELECT my_time AT TIME ZONE 'PDT' FROM foo

重要的是要了解AT TIME ZONE '...'语法在timestamp之间切换timestamp with time zone

  • timestamp AT TIME ZONE 'PDT'转换为,timestamp with time zone并告诉postgresql转换为PDT时区。
  • timestamp with time zone AT TIME ZONE 'PDT'转换为一个有timestamp说服力的postgresql,以将其解释为来自“ PDT”。

这种对称性意味着AT TIME ZONE 'foo'您只需反转即可AT TIME ZONE 'foo'换种方式SELECT anything AT TIME ZONE 'PDT' AT TIME ZONE 'PDT'将始终anything保持不变。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

我们可以在Hibernate HQL查询中连接两个属性吗?

来自分类Dev

我们可以在两个不同的活动类中使用一个片段吗

来自分类Dev

我们如何比较两个不同文件中的两个列表?

来自分类Dev

比较具有不同时区的两个“时间”对象

来自分类Dev

我们可以在两个不同的主机上使用一个SSL证书吗

来自分类Dev

我们可以为一个外键引用两个不同的表吗?

来自分类Dev

我们可以从C中的同一结构中获得两个或多个typedef吗?

来自分类Dev

我们可以从两个类的限制中推断出它们的关系吗?

来自分类Dev

在QT中,我们可以有两个名称相同但参数不同的插槽吗?

来自分类Dev

我们可以在2个特定的IP和端口对之间同时拥有两个udp流吗?

来自分类Dev

我们如何比较两个整数?

来自分类Dev

我们可以在两个不同的功能区中创建相同名称的PushButton吗?

来自分类Dev

我们可以定义两个具有相同名称但参数不同的函数吗?

来自分类Dev

ReactJS:我们可以在一个文本字段中有两个onChange吗?

来自分类Dev

我们可以在Appscript调用的单个函数中调用两个函数吗?

来自分类Dev

我们可以在具有IIS的计算机上托管两个或多个网站吗?

来自分类Dev

我们可以在两个不同的活动类中使用一个片段吗

来自分类Dev

我们可以在JAVA中获得静态字段的两个副本吗

来自分类Dev

我们可以在一个外键字段中拥有两个主键吗?

来自分类Dev

我们可以一次对两个不同的数组使用foreach()吗?

来自分类Dev

我们可以在Codeigniter控制器中创建两个具有相同名称的函数吗?

来自分类Dev

我可以同时没有两个ssh吗?

来自分类Dev

我们可以同时从C ++字符串中删除两个子字符串吗?

来自分类Dev

我们可以在没有任何公共密钥的情况下联接两个表吗?

来自分类Dev

我们可以在excel中为只有两个趋势线的两组绘制散点图吗?

来自分类Dev

我们可以在单个 Function App 中拥有两个单独的 bin 文件夹吗?

来自分类Dev

laravel carbon 从时间戳比较两个时区时间

来自分类Dev

这是一个关于python中列表的问题。我们可以连接两个列表吗

来自分类Dev

我们可以在 Java8 中对两个不同的 Streams 执行比较操作吗?

Related 相关文章

  1. 1

    我们可以在Hibernate HQL查询中连接两个属性吗?

  2. 2

    我们可以在两个不同的活动类中使用一个片段吗

  3. 3

    我们如何比较两个不同文件中的两个列表?

  4. 4

    比较具有不同时区的两个“时间”对象

  5. 5

    我们可以在两个不同的主机上使用一个SSL证书吗

  6. 6

    我们可以为一个外键引用两个不同的表吗?

  7. 7

    我们可以从C中的同一结构中获得两个或多个typedef吗?

  8. 8

    我们可以从两个类的限制中推断出它们的关系吗?

  9. 9

    在QT中,我们可以有两个名称相同但参数不同的插槽吗?

  10. 10

    我们可以在2个特定的IP和端口对之间同时拥有两个udp流吗?

  11. 11

    我们如何比较两个整数?

  12. 12

    我们可以在两个不同的功能区中创建相同名称的PushButton吗?

  13. 13

    我们可以定义两个具有相同名称但参数不同的函数吗?

  14. 14

    ReactJS:我们可以在一个文本字段中有两个onChange吗?

  15. 15

    我们可以在Appscript调用的单个函数中调用两个函数吗?

  16. 16

    我们可以在具有IIS的计算机上托管两个或多个网站吗?

  17. 17

    我们可以在两个不同的活动类中使用一个片段吗

  18. 18

    我们可以在JAVA中获得静态字段的两个副本吗

  19. 19

    我们可以在一个外键字段中拥有两个主键吗?

  20. 20

    我们可以一次对两个不同的数组使用foreach()吗?

  21. 21

    我们可以在Codeigniter控制器中创建两个具有相同名称的函数吗?

  22. 22

    我可以同时没有两个ssh吗?

  23. 23

    我们可以同时从C ++字符串中删除两个子字符串吗?

  24. 24

    我们可以在没有任何公共密钥的情况下联接两个表吗?

  25. 25

    我们可以在excel中为只有两个趋势线的两组绘制散点图吗?

  26. 26

    我们可以在单个 Function App 中拥有两个单独的 bin 文件夹吗?

  27. 27

    laravel carbon 从时间戳比较两个时区时间

  28. 28

    这是一个关于python中列表的问题。我们可以连接两个列表吗

  29. 29

    我们可以在 Java8 中对两个不同的 Streams 执行比较操作吗?

热门标签

归档