【问题标题】:select dates between two unix timestamps选择两个 Unix 时间戳之间的日期
【发布时间】:2012-10-29 15:56:26
【问题描述】:

我有表 users。

列:

  • user_id - 整数
  • user_date - 整数(unix 时间戳)

有些行有 user_date,有些有 NULL。

我需要找到所有 user_id,其中 user_date 包括 '2012-10-21' 和 '2012-10-24' 之间的时间段

【问题讨论】:

    标签: postgresql timestamp unix-timestamp


    【解决方案1】:
    SELECT *
    FROM users
    WHERE user_date BETWEEN
      EXTRACT(EPOCH FROM date '2012-10-21') AND
      EXTRACT(EPOCH FROM date '2012-10-24' + interval '1 day');
    

    如果您不希望包含结束日期,请删除添加一天的位。

    【讨论】:

    • 为什么有一个+间隔'1天'?对于 BETWEEN,Postgres SQL 的行为是否不同?
    • @YasiruG 由于user_date 字段是一个时间戳,如果一天没有添加到范围的末尾,它只会包括在结束日期的第一秒添加的用户。跨度>
    【解决方案2】:
    select *
    from users
    where 
        timestamp 'epoch' + user_date * interval '1 second' between '2012-10-21' and '2012-10-24' 
        and
        user_date is not null
    

    【讨论】:

    • 小心那些隐式日期转换!
    • 您似乎想将两个参数都转换为整数,因此您可以在user_date 上使用索引,对吗?
    猜你喜欢
    • 1970-01-01
    • 2012-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-17
    • 2014-05-22
    • 2022-01-23
    • 2010-10-02
    相关资源
    最近更新 更多