レガシーデータベースで実行されている Sequel を使用して Ruby プログラムを作成しています。異なる日時形式を扱う際に問題があります。
DBには列を持つテーブルがありますstart_date
。Sequel の移行スクリプトでは、SQLiteDateTime
の型であるに設定しましたがtimestamp
、レガシー データの時間形式は異なります。
- のように ISO8601 を使用しているものもあり
2013-09-01T08:28:00+10:00
ます。 - のような名前があるかどうかはわかりませんが、別のものを使用している人もい
2013-09-01 08:28:00.000000+1000
ます。
問題は、テーブルに対してクエリを実行して でフィルター処理しようとするとstart_date
、2 つの日時形式の違いによって誤った結果が生じることです。
私が使用しているクエリは次のとおりです。
current = Time.now
MyModel.where { start_date < current }
Sequel は、次のように SQL に変換します。
SELECT * FROM `my_model` WHERE `start_date` < '2013-09-01 08:28:00.000000'
私のローカル テストでは、Sequel は日付を文字列として比較しているように見えるため2013-09-01 08:28:00.000000+1000
、2013-09-01T01:28:00+10:00
. 空白がT
これよりも少ないため、私が望むものではありません。
iso8601
次のような時間を使用できます。
current_iso8601 = Time.now.iso8601
MyModel.where { start_date < current_iso8601 }
しかし、データベースには 2 つの異なる日時形式があるため、問題は解決しません。
私の質問は次のとおりです。
- Ruby/Sequel は、文字列ではなく日付/時刻によるデータベースのクエリをサポートしていますか?
- さまざまな日時形式で機能しますか?
- SQLite はローカル テスト用であり、本番環境では MySQL になります。そのため、ソリューションは一般的な Sequel メソッドをアダプターとして使用する必要があり、データベース固有のメソッドは使用しないでください。
注: プログラムは Rails アプリケーションではありません。
どうもありがとうございました!