从Rails在PostgreSQL中存储时间间隔

时间:2011-06-22 14:40:55

标签: ruby-on-rails-3 postgresql sqldatatypes

我需要在PosgreSQL中存储时间inverval。数据将来自Ruby on Rails。

Say,PizzaHut从9:00到18:00接受订单。

我创建了以下迁移:

class AddOrderTimeAndDeliveryTimeToMerchants < ActiveRecord::Migration
  def self.up
    add_column :merchants, :order_time, :interval
  end

我已阅读documentation,现在有以下代码:

Merchant.create( :delivery_time => "9:00 18:00" )

当我执行它时,我收到以下错误消息:

PGError: ERROR:  invalid input syntax for type interval: "9:00 18:00"

如何正确地做到这一点?

2 个答案:

答案 0 :(得分:4)

我不认为间隔确实是你想要的。间隔表示没有任何特定终点的时间跨度;例如,您将时间间隔添加到现有时间以获得另一个时间。在两个不同的时间你会更好:

add_column :merchants, :order_from, :time, :null => false
add_column :merchants, :order_to,   :time, :null => false

然后,如果由于某种原因您需要知道他们打开交付的时间,您可以通过从:order_from中减去:order_to来构建间隔。

如果你真的必须使用间隔,那么你需要构造一个像这样的值:

:delivery_time => "interval '11 hour'"

请注意,这说明间隔不是从 A B 的特定时间范围,它只是某个特定长度的时间范围(没有指定的结束)点)。

答案 1 :(得分:0)

你可能想要一个没有时区的时间,因为如果纽约的Domino在当地时间9:00开放,加州的Domino也在当地时间9:00开放,那么带有时区的时间将无法正常工作

你可能想要的是两件事之一。开始和结束时间的两倍,或开始时间和间隔。我建议两次,但选择权归你的。请注意,您可以通过从另一个中减去一个来间隔两次。

select '09:00:00'::time - '05:00:00'::time;
 ?column? 
----------
 04:00:00