sql >> データベース >  >> RDS >> Mysql

クエリよりも短い時間のRails`where`

    編集25/9/20

    Ruby 2.6を使用している場合は、無限の範囲でこれを行うことができ、Ruby 2.7では、始まりのない範囲を使用できます。

    例:

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

    生成する

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

    および

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

    生成する

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

    編集

    これはRails5で可能になりました!

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

    SQLを生成します

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

    元の(およびRails <5)回答

    基本的なwhereを使用する方法があるようには見えません タイムスタンプの大なり記号または小なり記号を生成するハッシュ構文。最も簡単で読みやすい方法は、私の質問のCurrent Simple Solutionに概説されています。 。

    別の方法ではARelを使用しますが、あまり見られない呼び出しを行う必要があります。まず、ARクラスのARelテーブルへのハンドルを取得し、列にアクセスして、gtより大きい結果を渡すことができます。 、gteq以上 、lt未満 、および/またはlteq以下 whereへの引数を持つメソッド 。

    上記の状況では、これは次のように行われます。

    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. 収集方法:OracleデータベースのDELETEプロシージャ

    2. サブクエリで外部クエリのテーブルを参照する

    3. T-SQL開発者向けのヒントを含むTOP5MySQLDelete構文

    4. EAV over SQL Server