从 postgresql 的 current_date 中选择 last Week 或 Weekend
Posted
技术标签:
【中文标题】从 postgresql 的 current_date 中选择 last Week 或 Weekend【英文标题】:Select last Week or Weekend from the current_date on postgresql 【发布时间】:2021-01-21 14:21:02 【问题描述】:我对 PostgreSQL 有一点问题,我可以用 CASE WHEN 做任何事情,但我希望有另一种方法可以做到这一点。
简而言之,如果 NOW() 是工作日(to_char(now(),'D') 介于 2 和 6 之间)或从最后一个周末开始,我必须从最后一个工作日计算 AVG 值(在其他情况下)。
例如,现在 (21/01/2021 dd/mm/aaaa) 我需要我的查询给我 11/01/2021 00:00:00 - 15/01/2021 23:59:59。 例如,对于下一个明天 (23/01/2021),我需要我的查询给我 16/01/2021 00:00:00 -17/01/2021 23:59:59。
有人知道我能不能用 SQL 做点什么吗?
谢谢,
问候
编辑: 我只需要一个选择 current_date 的查询,它会返回以下日期范围。
Select
case when to_char(now(),'D') in (2,3,4,5,6) then --last working day week
else ----last weekend days
end
对于最后一个工作日,我的意思是从星期一的午夜到上周星期五的 23:59:59 的范围(对于今天,21/01/2021,我需要 11/01/2021 00: 00:00 - 2021 年 1 月 15 日 23:59:59),对于最后一个周末,我指的是从周六午夜到周日 23:59:59 的范围
【问题讨论】:
请提供样本数据和期望的结果。你的问题不清楚。 如果您有一个日期并且想要获取同一周的第一个和最后一个日期 - 您只需要从您的日期中减去 DOW(星期几)天数(这样您就可以得到给定周的星期一),然后加上 7 天得到星期日。 我需要最后一个工作日,而不是同一周,如果现在我们在周一至周五之间,则需要周一至周五的范围;如果现在我们在周六至周日之间,则需要周六至周日的范围. 【参考方案1】:我解决了!
select current_date - extract(isodow from current_date)::integer-6 as monday,
current_date - extract(isodow from current_date)::integer-2 as friday,
current_date - extract(isodow from current_date)::integer-1 as saturday,
current_date - extract(isodow from current_date)::integer as sunday
它适用于所有日期。我只需要在何时选择不同的 2 个选择语句时用例。
谢谢大家
【讨论】:
以上是关于从 postgresql 的 current_date 中选择 last Week 或 Weekend的主要内容,如果未能解决你的问题,请参考以下文章
使用 shell 脚本(centos 环境)从 postgresql artifacoty 获取最新版本的 postgresql 版本