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が提案するように実行して間隔を減算するか、整数を加算/減算できるdate
タイプを使用できます。
SELECT now()::date + 100 AS date1, current_date - 100 AS date2
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の関数のセット であることです=および 演算子
したがって、MySQLの時間では、基本的にNOW()
をダンバータイプとして扱うか、+
をオーバーライドして、MySQLのドキュメントにはない推定を行うことができます。いずれにせよ、あなたはおそらくpgのdate
およびinterval
タイプを見たいと思うでしょう。
以下に例を示します...
select * from tablename where to_char(added_time, 'YYYY-MM-DD') = to_char( now(), 'YYYY-MM-DD' )
added_timeは、一致させるためにcharに変換した列名です