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

Rails 3.1:時間範囲内のレコードのPostgresへのクエリ

    to_dateを呼び出すと、タイムゾーンがわかりません。 だからそうしないでください:

    @today    = Time.now.in_time_zone(@person.time_zone).midnight.utc
    @tomorrow = @today + 1.day
    

    some_date.to_datetimeの場合 、UTCであるDateTimeインスタンスを取得するため、次のような結果になります。

    Time.now.in_time_zone(@person.time_zone).midnight.to_date.to_datetime
    

    時刻は00:00:00で、タイムゾーンはUTCです。 00:00:00は、@person.time_zoneの正しい時刻です。 ただし、UTCには適していません(もちろん、@personを除く) +0タイムゾーンにあります。

    また、overlapsを使用してクエリを簡略化できます :

    where(
        '(start_time, end_time) overlaps (timestamp :today, timestamp :tomorrow)',
        :today => @today, :tomorrow => @tomorrow
    )
    

    overlapsに注意してください ハーフオープン間隔で動作します:

    各期間は、ハーフオープン間隔start <= time < endを表すと見なされます 、開始と終了が等しい場合を除き、その場合はその単一の瞬間を表します。




    1. ツリービューコントロールを使用したアクセスメニューの作成

    2. pip install mysqlclientは致命的なエラーを返しますC1083:ファイルを開くことができません:'mysql.h':そのようなファイルまたはディレクトリはありません

    3. PostgreSQL移行用のトップオープンソースツール

    4. DEFAULT NULLのMySQL列-文体の選択ですか、それともそうですか?