web-dev-qa-db-ja.com

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

どうすれば解決できますか?

63
xRobot

整数の代わりに間隔を使用します。

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

Postgresでnow()を使用することもできます。問題は、timestampまたはtimestamptzから整数を加算/減算できないことです。 Mark Byersが提案するように実行して間隔を減算するか、整数を加算/減算できるdateタイプを使用できます。

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

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の関数のセット であることです=および 演算子

したがって、MySQLの時間では、基本的にNOW()をダンバータイプとして扱うか、+をオーバーライドして、MySQLのドキュメントにはない推定を行うことができます。いずれにせよ、あなたはおそらくpgのdateおよびintervalタイプを見たいと思うでしょう。

4
Evan Carroll

以下に例を示します...

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

added_timeは、一致させるためにcharに変換した列名です

4
Rohit Sonawane