【问题标题】:Get the timestamp of a day of the week获取一周中某一天的时间戳
【发布时间】:2011-03-16 15:24:22
【问题描述】:

我正在尝试使用 postgrSQL 查找一周中某一天的时间戳。例如,可以使用 now() 来获取当前时间,但我想获取相同类型的数据返回,例如最近的星期一或星期日。

我正在寻找这个,因为我有一个检索现在和几个月前之间的数据的查询,我不想包括当前的一周。作为一个例子,它现在做了什么:

creation_date > now() - INTERVAL '2 month'

我认为这可能会实现我的目标:

BETWEEN now() - INTERVAL '4 month' AND now() - INTERVAL '1 week'

但它只是从查询中减去 7 天,这不是我想要的。基本上,我想要:

BETWEEN now() - INTERVAL '4 month' AND ????

问号是最近星期天的时间戳,至少我相信这会起作用。

【问题讨论】:

  • 这样的“SELECT * FROM TABLE WHERE CREATION_DATE > (SELECT ADD_MONTHS(SYSDATE,-3) FROM DUAL) AND CREATION_DATE

标签: sql postgresql


【解决方案1】:

date_trunc('week', current_date) - interval '1' day

date_trunc('week', current_date) 将返回一周开始的日期。

在 Postgres 中,一周的开始总是星期一。这就是为什么你需要从结果中减去一天才能得到星期天。

【讨论】:

  • 谢谢,我真的应该意识到date_trunc 会起作用。另外,谢谢提醒周一是一周的开始,我总是忘记,最后浪费时间
【解决方案2】:

您可以使用EXTRACT(DOW FROM date) 提取一周中的当前日期(0-6,星期日为 0)。然后,您可以使用它来创建一个间隔来添加或减去以达到特定的工作日。例如,最近的星期日是now() - (EXTRACT(DOW FROM now()) || ' days')::interval

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-12-06
    • 1970-01-01
    • 2019-06-26
    • 1970-01-01
    • 1970-01-01
    • 2021-06-11
    • 1970-01-01
    相关资源
    最近更新 更多