代码之家  ›  专栏  ›  技术社区  ›  ip696

PostgresSQL-日期工作异常

  •  0
  • ip696  · 技术社区  · 7 年前

    我需要为所有行创建select,因为它目前已超过15分钟。

    SELECT last_answer_date FROM messages WHERE last_answer_date > NOW() - INTERVAL '15 minutes';
    

    当我在16:51:00开始此“立即选择”时,我得到结果:

    2019-01-17 16:25:00
    

    换句话说,我的意思是:

    把所有的行都给我 where last_answer_date > 16:51:00 - 15 minutes (因为现在16:51:00)

    给我所有行“最后一次答复的地点”\u日期>16:36:00(因为现在16:51:00-15分钟=16:36:00)

    我得到 16:25:00 但是 16:25:00 < 16:36:00

    编辑:当我改变 > < 我明白了 2019-01-16 17:50:27

    编辑2 :例如:

    SELECT insert_date FROM smev_messages WHERE insert_date < NOW() - INTERVAL '15 minutes';  
    

    现在= 17:16

    enter image description here

    改为 SELECT insert_date FROM smev_messages WHERE insert_date > NOW() - INTERVAL '15 minutes';

    17:17

    enter image description here

    2 回复  |  直到 7 年前
        1
  •  2
  •   Georgi Raychev    7 年前

    我想你的时区可能有问题。 你可以跟我核对一下 show timezone; select now() 看看它是否符合你的期望。

        2
  •  0
  •   Gustavo de Souza    7 年前

    如果您有一个包含大量数据的大表,您将遇到一些性能问题,因为当您调用

    现在()-间隔“15分钟”内部postgress需要将间隔转换为日期 Postgress Interval

    我认为一个更好的方法是,您应该做类似的事情来提高性能,因为所有日期都是长值,您应该像长值一样进行比较。

    -- 15 minutes in millis = 900000 
    -- 15 minutes in secods = 900
    -- Retrive all data inserted at latest 15 minutes
    SELECT last_answer_date FROM messages WHERE (NOW() - last_answer_date) < 900;
    -- Retrive all data inserted more than 15 minutes
    SELECT last_answer_date FROM messages WHERE (NOW() - last_answer_date) > 900;