在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
我该如何解决?
答案 0 :(得分:114)
使用间隔而不是整数:
SELECT *
FROM table
WHERE auth_user.lastactivity > CURRENT_TIMESTAMP - INTERVAL '100 days'
答案 1 :(得分:29)
您也可以在Postgres中使用now()
。问题是您无法在timestamp
或timestamptz
中添加/减去整数。你可以像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 type的own set of functions和operators
所以MySQL时间本质上允许你将NOW()
视为一种笨蛋类型,或者它覆盖+
以假设我在MySQL文档中找不到。无论如何,您可能希望查看pg中的date
和interval
类型。
答案 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';