sql >> Databasteknik >  >> RDS >> Mysql

Rails "var" för tid mindre än frågor

Redigera 2 5/9/20

Om du använder Ruby 2.6 kan du göra detta med oändliga intervall och i Ruby 2.7 kan du använda intervall utan start.

T.ex.:

# Ruby >= 2.6
User.where(last_deposit: 10.days.ago..)

genererar

SELECT "users".* FROM "users" WHERE "user"."last_deposit" >= '2020-04-29 21:58:39.109419'"

och

# Ruby >= 2.7
User.where(last_deposit: ..10.days.ago)

genererar

SELECT "users".* FROM "users" WHERE "users"."last_deposit" <= '2020-04-29 22:01:05.582055'

Redigera

Detta är nu möjligt i Rails 5!

User.where(last_deposit: 10.days.ago..DateTime::Infinity.new)

kommer att generera SQL

SELECT `users`.* FROM `users` WHERE (`users`.`last_deposit` >= '2018-06-30 17:08:54.130085').

Original (och räls <5) svar

Det verkar inte som om det finns något sätt att använda grundläggande where hash-syntax för att generera en fråga som är större än eller mindre än för tidsstämplar. Det enklaste och mest läsbara sättet beskrivs i min fråga under Current Simple Solution .

Ett annat sätt att göra det använder sig av ARel men du måste göra några mindre vanliga samtal. Först kan du få ett handtag till AR-klassens ARel-tabell, komma åt kolumnen, skicka resultatet av större än gt , större än eller lika med gteq , mindre än lt , och/eller mindre än eller lika med lteq metod med ett argument till where .

I situationen ovan skulle detta göras som:

last_deposit_column = User.arel_table[:last_deposit]
last_deposit_over_ten_days_ago = last_deposit_column.gteq(10.days.ago)
User.where(last_deposit_over_ten_days_ago)


  1. Konfigurera en lyssnare i Oracle Database (12c, 18c och 19c utgåvor)

  2. 4 sätt att söka efter dubbletter av rader i SQL Server

  3. Handledning för formulär och rapporter för Oracle 9i, Oracle 10g och Oracle 11g Developer Suite

  4. Simulering av CONNECT BY PRIOR av Oracle i SQL Server