2011-06-22 32 views
2

我需要在PosgreSQL中存儲時間inverval。數據將從Ruby on Rails中提取。從Rails在PostgreSQL中存儲時間間隔

說,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" 

如何正確地做到這一點?

回答

3

我不認爲間隔真的是你想要的。間隔表示沒有任何特定終點的時間跨度;例如,您將間隔添加到現有時間以獲得另一次時間。你會好起來的有兩個鮮明的時代:

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

然後,如果由於某種原因,你需要知道他們有多少時間是開放的交付,您可以通過從:order_to減去:order_from建設的間隔。

如果你真的必須使用的時間間隔,那麼你就需要構建一個值是這樣的:

:delivery_time => "interval '11 hour'" 

注意如何這說明了一個間隔不是從一個到一個特定的時間範圍B,它只是一定長度的時間範圍(沒有指定的終點)。

+0

謝謝。只是:delivery_time =>「11小時」工作形式。這將被存儲爲11:00:00。 :delivery_time =>「2天1小時5分鐘」保存爲3天1:05:00。涼。 –

0

很可能你想在這裏沒有時區,因爲如果紐約的多米諾骨牌在當地時間9:00開放,加州的多米諾骨牌也在當地時間9:00開放,那麼帶時區的時間將不起作用正常。

你可能想要的是兩件事之一。或者兩次開始和結束時間,或者開始時間和間隔。我會建議兩次,但選擇是你的。請注意,您可以從兩次減去另一次間隔。

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