【问题标题】:Postgres wrong query result with timezonesPostgres 时区错误的查询结果
【发布时间】:2017-09-25 04:01:49
【问题描述】:

我的表格如下所示:

库存

inventory | creationDate
{}        | 2017-04-27 14:15:15.25+02
{}        | 2017-04-27 13:03:02.205+02
{}        | 2017-04-27 13:03:01.766+02
{}        | 2017-04-27 13:02:19.8+02
{}        | 2017-04-27 12:35:52.12+02

查询:

SELECT * FROM "Inventory" 
WHERE "registerTillInventoryId" = 1 
AND "creationDate" <= '2017-04-27 12:02:38.000 +00:00' 
ORDER BY "creationDate" DESC;

结果:

inventory | creationDate
{}        | 2017-04-27 13:03:02.205+02
{}        | 2017-04-27 13:03:01.766+02
{}        | 2017-04-27 13:02:19.8+02
{}        | 2017-04-27 12:35:52.12+02

我的问题是为什么我要从

13:03:02.205+02 and 13:03:01.766+02

我的查询结果应该是

inventory | creationDate
{}        | 2017-04-27 13:02:19.8+02
{}        | 2017-04-27 12:35:52.12+02

【问题讨论】:

  • 如果我不使用 DESC,我会以错误的顺序得到结果
  • 结果错误我在 12:02:38.000 之后获取数据
  • @OtoShavadze 为什么? '2017-04-27 12:02:38.000 +00:00''2017-04-27 14:02:38.000 +00:02',不是吗? :)
  • '2017-04-27 12:02:38.000 +00:00'
  • 为什么不只是"creationDate" &lt;= '2017-04-27 12:02:38.000' ?.. 你当然不会得到你想要的结果。我在问你为什么首先混合 tz?..

标签: sql postgresql time timezone postgresql-9.4


【解决方案1】:

好的,谢谢您的帮助。借助沃尊的评论,我解决了这个问题。

我没有描述的是我试图从 12:02 +00:00 得到 13:02

我真的不需要时区。 所以如果我查询

creationDate < '2017-04-27 13:02:38.000' 

直接。如果没有时区,我会得到正确的结果。

{} | 2017-04-27 13:02:19.8+02
{} | 2017-04-27 12:35:52.12+02
...

【讨论】:

    【解决方案2】:

    '2017-04-27 12:02:38.000 +00:00''2017-04-27 14:02:38.000 +00:02', 所以它返回除'2017-04-27 14:15:15.25+02' 之外的所有值,因为它是唯一不符合"creationDate" &lt;= '2017-04-27 12:02:38.000 +00:00' 的值

    这是对的。示例:

    t=# with a as (select '2017-04-27 12:02:38.000 +00:00' at time zone 'utc' ts)
    select ts, ts at time zone 'gmt+2' from a;
             ts          |        timezone
    ---------------------+------------------------
     2017-04-27 12:02:38 | 2017-04-27 14:02:38+00
    (1 row)
    
    Time: 0.480 ms
    

    为什么不直接"creationDate" &lt;= '2017-04-27 12:02:38.000' 以避免混淆 tz?..

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-27
      • 2011-01-13
      • 2015-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-03
      • 1970-01-01
      相关资源
      最近更新 更多