【问题标题】:Selecting records between two timestamps在两个时间戳之间选择记录
【发布时间】:2012-02-02 03:46:15
【问题描述】:

我正在将带有 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();

我无法为selectedtimeParm 评估Parm - 它无法正确解决。

编者注:我没有更改日期时间类型timestamp 对术语period、time frame、time 和date 的不准确使用,因为我在回答中对此进行了讨论。

【问题讨论】:

  • select * from your_table where tstamp between '2021-04-01' and now();

标签: postgresql datetime


【解决方案1】:

有什么问题:

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、time 和timestamp 的数据类型——带或不带时区。从阅读"Date/Time Types" in the manual章节开始。

错误消息也会有很长的路要走。

【讨论】:

  • 我找到了答案:select * from TABLE where record_time BETWEEN $from_datetime AND NOW();谢谢
【解决方案2】:

对于正在寻找解决此问题的任何人。您需要从 where 子句中删除时间戳并使用 BETWEEN!

TABLENAME.COL-NAME-FOR-TIMESTAMP BETWEEN '2020-01-29 04:18:00-06' AND CURRENT_TIMESTAMP

【讨论】:

    猜你喜欢
    • 2015-01-15
    • 1970-01-01
    • 2013-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-10
    • 1970-01-01
    相关资源
    最近更新 更多