从 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 版本

从容器内部连接到 PostgreSQL 容器的问题

将数据从 redshift 传输到 postgresql

HIVE一个月中的天数[重复]

错误:分布式表的唯一索引必须包含散列分布列。啥时候从 postgresql 迁移到 postgresql-xl

PostgreSQL - 从连接列连接索引