2012-01-04 124 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