2017-10-28 12 views
1

2つの列の長さ(整数)とstart_time(時間)があります。select where時間列と整数列の合計がcurrent_timeより小さい

start_timeとdurationの合計がcurrent_timeより大きい部分を選択する必要があります。このよう

何か -

Availability.where("start_time + duration < current_time")
これを行うにはどのように?私はあなたがおそらく単位とキャストを指定することにより、intervalからintegerを変換したいと思い、timeintegerを追加するにはRubyの-on Railsの

答えて

3

でのPostgresを使用しています。 durationはその後、数分内にある場合:

start_time + (duration || ' minutes')::interval > current_time 

durationは、秒の場合:||はSQLで文字列連結演算子である

start_time + (duration || ' seconds')::interval > current_time 

注こと。

あなたはwhereコールにそれらのいずれかを置くことができます:'23:00'::time + '2 hours'::interval01:00:00である(すなわちtime sが真夜中にラップアラウンド)ので、あなたは何に応じて、日付コンポーネントを含める必要がある場合がありますことを心に留めておいてください

Availability.where("start_time + (duration || ' seconds')::interval > current_time") 

データは似ていて、具体的な必要性は何か。

関連する問題