从Now()到Postgresql中的Current_timestamp

时间:2010-06-07 21:55:20

标签: sql datetime postgresql

在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 个答案:

答案 0 :(得分:114)

使用间隔而不是整数:

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

答案 1 :(得分:29)

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

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

答案 2 :(得分:4)

以下是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

现在,您当然可以将您的智能日期减少到更少......

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 typeown set of functionsoperators

所以MySQL时间本质上允许你将NOW()视为一种笨蛋类型,或者它覆盖+以假设我在MySQL文档中找不到。无论如何,您可能希望查看pg中的dateinterval类型。

答案 3 :(得分:4)

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

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

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

答案 4 :(得分:-2)

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