2012-01-04 125 views
11

我正在將具有SQL事務處理命令的Unix腳本轉換爲PostgreSQL命令。在兩個時間戳之間選擇記錄

我有一個包含字段last_update_time(xtime)的記錄表,我想選擇表中已選定時間段內已更新的每條記錄。

說,當前時間它05/01/2012 10:00:00和選定的時間是04/01/2012 23:55:00。如何從這些日期之間更新的表中選擇所有記錄。在發出psql命令之前,我已經在UNIX腳本中將2次轉換爲秒,並計算了2個週期之間的間隔(秒)。

我覺得像

SELECT A,B,C FROM table 
WHERE xtime BETWEEN now() - interval '$selectedtimeParm(in secs)' AND now(); 

我無法評價ParmselectedtimeParm - 它不妥善解決。

編者按:我沒有改變不正確的使用術語periodtime frametimedate爲DateTime類型timestamp,因爲我討論,在我的答案。

回答

24

出了什麼問題:

SELECT a,b,c 
FROM table 
WHERE xtime BETWEEN '2012-04-01 23:55:00'::timestamp 
       AND now()::timestamp; 

如果你想用幾秒鐘的時間數爲interval操作:

... 
WHERE xtime BETWEEN now()::timestamp - (interval '1s') * $selectedtimeParm 
       AND now()::timestamp; 

注意,我是如何使用的標準ISO 8601的日期格式YYYY-MM-DD h24:mi:ss這與任何語言環境或DateStyle設置都是明確的。

還要注意,BETWEEN構造的第一個值必須是較小的值。如果您不知道哪個值更小,請改用BETWEEN SYMMETRIC

在您的問題中,您將日期時間類型timestamp稱爲「日期」,「時間」和「時間段」。在標題中,您使用了術語「時間框架」,我將其更改爲「時間戳」。所有這些條款都是錯誤的。自由地交換它們會使問題更難以理解。

這個,你只是標記問題psql(這個問題幾乎不涉及命令行終端)的事實可能有助於解釋爲什麼沒有人會回答幾天。通常情況下,這裏只需要幾分鐘。我很難理解你的問題,不得不閱讀它幾次。

您需要了解數據類型date,interval,timetimestamp - 有或沒有時區。首先閱讀"Date/Time Types" in the manual一章。

錯誤消息也會走很長的路。

+0

我找到了我的答案:select * from TABLE where record_time BETWEEN $ from_datetime AND NOW();謝謝 – Sharon 2012-01-19 23:47:15