从Now()到Postgresql中的Current_timestamp

在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 

我该如何解决?

使用间隔而不是整数:

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

你也可以在Postgres中使用now() 。 问题是你不能添加/减去timestamptimestamptz整数。 你可以像马克·拜尔斯(Mark Byers)所build议的那样做,并减去一个时间间隔,或者使用允许你加/减整数的datetypes

 SELECT now()::date + 100 AS date1, current_date - 100 AS date2 

这是一个例子…

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

added_time是我转换为char匹配的列名

以下是MySQL文档关于NOW()

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

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

现在,你当然可以减less你的智能dateless…

 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; 

但是,这将是一个非常糟糕的主意,你需要了解的是,时间和date不是愚蠢的非格式化的数字,它们是他们自己的types与他们自己的一套function和操作

所以MySQL的时间基本上可以让你把NOW()当成一个dumbertypes,或者覆盖+来推定我在MySQL文档中找不到。 无论如何,你可能想看一下dateintervaltypes。

 select * from table where column_date > now()- INTERVAL '6 hours';