从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()
。 问题是你不能添加/减去timestamp
或timestamptz
整数。 你可以像马克·拜尔斯(Mark Byers)所build议的那样做,并减去一个时间间隔,或者使用允许你加/减整数的date
types
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文档中找不到。 无论如何,你可能想看一下date
和interval
types。
select * from table where column_date > now()- INTERVAL '6 hours';