从Now()到Postgresql中的Current_timestamp

xRo*_*bot 67 sql postgresql datetime

在mysql中我能够这样做:

SELECT *
FROM table
WHERE auth_user.lastactivity > NOW() - 100
Run Code Online (Sandbox Code Playgroud)

现在在postgresql我正在使用此查询:

SELECT *
FROM table
WHERE auth_user.lastactivity > CURRENT_TIMESTAMP - 100
Run Code Online (Sandbox Code Playgroud)

但我得到这个错误:

operator does not exist: timestamp with time zone - integer
Run Code Online (Sandbox Code Playgroud)

我怎么解决?

Mar*_*ers 122

使用间隔而不是整数:

SELECT *
FROM table
WHERE auth_user.lastactivity > CURRENT_TIMESTAMP - INTERVAL '100 days'
Run Code Online (Sandbox Code Playgroud)


Sco*_*ley 31

你也可以now()在Postgres中使用.问题是你不能从timestamp或添加/减去整数timestamptz.你可以像Mark Byers建议的那样做并减去一个间隔,或者使用date允许你加/减整数的类型

SELECT now()::date + 100 AS date1, current_date - 100 AS date2
Run Code Online (Sandbox Code Playgroud)

  • 不是downvoting,但是:INTERVAL显示你在执行日期数学时你正在使用哪个单元.例如,未来的即时时间`now():: date + 100`表示不明显.是否存在整数数学比INTERVAL数学更必要的情况? (4认同)

小智 6

这是一个例子......

select * from tablename where to_char(added_time, 'YYYY-MM-DD')  = to_char( now(), 'YYYY-MM-DD' )
Run Code Online (Sandbox Code Playgroud)

added_time 是一个列名,我将其转换为 char 以进行匹配


Eva*_*oll 5

这是MySQL文档所说的NOW()

以'YYYY-MM-DD HH:MM:SS'或YYYYMMDDHHMMSS.uuuuuu格式返回当前日期和时间作为值,具体取决于该函数是在字符串上下文中还是在数字上下文中使用。该值以当前时区表示。

mysql> SELECT NOW();
        -> '2007-12-15 23:50:26'
mysql> SELECT NOW() + 0;
        -> 20071215235026.000000
Run Code Online (Sandbox Code Playgroud)

现在,您当然可以将智能约会减少到更少...

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;
Run Code Online (Sandbox Code Playgroud)

但是,那将是一个非常糟糕的主意,您需要了解的是时间和日期不是愚蠢的无格式数字,它们是属于自己的类型,具有自己的一组函数运算符

因此,MySQL时间实质上使您可以将其NOW()视为哑巴类型,或者它被覆盖+以做出我在MySQL文档中找不到的假设。无论哪种方式,您都可能希望查看pg 中的dateinterval类型。