1

このクエリの使用:

users = User.where('confirmed_at is NULL AND confirmation_sent_at <= DATE_SUB(NOW(), INTERVAL ? days)', 1)

mysql では問題なく動作しますが、Postgresql では次のように失敗します。

PG::SyntaxError: ERROR:  syntax error at or near "1"
    LINE 1: ...AND confirmation_sent_at <= DATE_SUB(NOW(), INTERVAL 1 day))
                                                                 ^
    : SELECT "users".* FROM "users"
      WHERE (confirmed_at is NULL AND confirmation_sent_at <= DATE_SUB(NOW(), INTERVAL 1 day))

私は理解しようとしていますが、ここでコンテキストがありません。このクエリで整数 1 が有効でないのはなぜですか?

4

2 に答える 2

3

PostgreSQL には機能がDATE_SUB()ないため、動作しません。

この式は Postgres で機能します。

... AND confirmation_sent_at <= (now() - interval '1 day')

または、次confirmation_sent_atの場合date:

... AND confirmation_sent_at <= (now()::date - 1)
于 2013-11-08T20:15:16.170 に答える
1

試す...

users = User.where(
    "confirmed_at IS NULL " +
    "AND confirmation_sent_at <= (NOW() - INTERVAL '1 DAY')"
)
于 2013-11-08T20:15:33.990 に答える