PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Ecto-Abfrage - Daten + Postgres-Intervalle + Abfrageinterpolation

Ich musste vor einiger Zeit genau das tun und nutzte schließlich die Tatsache, dass Sie Intervalle mit $1 multiplizieren können .

postgres=# select interval '1 year' - interval '1 month' * 5;
 ?column?
----------
 7 mons
(1 row)

Das sollte also funktionieren:

query = from ch in Child, 
            join: loc in assoc(ch, :location),
            where: ch.birthday <= fragment("(now() AT TIME ZONE ?)::date - interval '1 month' * ?", loc.time_zone, 2)

Repo.all(query)