【问题标题】:select where sum of time column & integer column is less than current_time选择时间列和整数列之和小于 current_time 的位置
【发布时间】:2017-10-28 22:23:47
【问题描述】:
我有两列 duration(integer) 和 start_time(time)。
我必须选择 start_time 和 duration 的总和大于 current_time 的位置。
类似的东西 -
Availability.where("start_time + duration < current_time")
这该怎么做?我在 Ruby-on-Rails 中使用 Postgres
【问题讨论】:
标签:
ruby-on-rails
postgresql
ruby-on-rails-4
【解决方案1】:
要将integer 添加到time,您可能希望通过指定单位和转换将integer 转换为interval。如果duration 以分钟为单位,则:
start_time + (duration || ' minutes')::interval > current_time
如果duration 是秒,那么:
start_time + (duration || ' seconds')::interval > current_time
注意||是SQL中的字符串连接运算符。
您可以将其中一个放入where 调用中:
Availability.where("start_time + (duration || ' seconds')::interval > current_time")
请记住,'23:00'::time + '2 hours'::interval 是 01:00:00(即 times 在午夜环绕),因此您可能需要包含日期组件,具体取决于数据的外观和具体需求。