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

从现在()到PostgreSQL中的当前时间戳

  •  57
  • xRobot  · 技术社区  · 15 年前

    在MySQL中,我可以这样做:

    SELECT *
    FROM table
    WHERE auth_user.lastactivity > NOW() - 100
    

    现在在PostgreSQL中,我使用这个查询:

    SELECT *
    FROM table
    WHERE auth_user.lastactivity > CURRENT_TIMESTAMP - 100
    

    但我得到了这个错误:

    operator does not exist: timestamp with time zone - integer
    

    我该如何解决?

    5 回复  |  直到 8 年前
        1
  •  110
  •   Mark Byers    15 年前

    使用间隔而不是整数:

    SELECT *
    FROM table
    WHERE auth_user.lastactivity > CURRENT_TIMESTAMP - INTERVAL '100 days'
    
        2
  •  29
  •   alexg    12 年前

    您也可以使用 now() 在邮局。问题是你不能从 timestamp timestamptz . 您可以按照Mark Byers的建议进行操作并减去一个间隔,或者使用 date 允许添加/减去整数的类型

    SELECT now()::date + 100 AS date1, current_date - 100 AS date2
    
        3
  •  4
  •   maralorn Evan Carroll    12 年前

    这是MySQL文档所说的 NOW() :

    以“yyyy-mm-dd hh:mm:ss”或“ YYYYMMDDHHMMSS.UUUUUUUU格式, 取决于功能是否 在字符串或数字上下文中使用。 该值以当前值表示 时区。

    mysql> SELECT NOW();
            -> '2007-12-15 23:50:26'
    mysql> SELECT NOW() + 0;
            -> 20071215235026.000000
    

    现在,你当然可以减少你的聪明约会…

    SELECT (
     date_part('year', NOW())::text
     || date_part('month', NOW())::text
     || date_part('day', NOW())::text
     || date_part('hour', NOW())::text
     || date_part('minute', NOW())::text
     || date_part('second', NOW())::text
    )::float8 + foo;
    

    但是,那真是个糟糕的主意,你需要理解的是时间和日期不是愚蠢的未配对数字,它们是 own type 与他们 own set of functions operators

    所以mysql时间基本上可以让你 现在() 作为一个哑铃类型,或者它覆盖 + 假设我在mysql文档中找不到。另外,你可能想看看 date interval PG中的类型。

        4
  •  4
  •   Tchami    10 年前

    下面是一个例子…

    select * from tablename where to_char(added_time, 'YYYY-MM-DD')  = to_char( now(), 'YYYY-MM-DD' )
    

    添加的时间是一个列名,我将其转换为char进行匹配

        5
  •  -1
  •   Luis Carlos Herrera Santos    8 年前
    select * from table where column_date > now()- INTERVAL '6 hours';