sql - PostgreSQL 中截至当前日期的每月工作日
问题描述
我想在 PostgreSQL 中随着时间的推移获取当月的工作日数,直到当前日期。
比如这个月到今天,工作日是17天,怎么从下面的查询或者一般的解决方案中得到呢?
SELECT
TO_CHAR(i, 'YYYY-MM') as year_month,
i::date as date,
EXTRACT(DOW FROM i) as number_weekday,
CASE WHEN EXTRACT(DOW FROM i) IN ('1', '2', '3', '4', '5')
AND i NOT IN ('2018-01-01', '2018-03-30', '2018-04-02', '2018-05-01', '2018-05-10', '2018-05-21', '2018-10-03', '2018-12-25', '2018-12-26',
'2019-01-01', '2019-04-19', '2019-04-22', '2019-05-01', '2019-05-30', '2019-06-10', '2019-10-03', '2019-12-25', '2019-12-26',
'2020-01-01', '2020-04-10', '2020-04-13', '2020-05-01', '2020-05-21', '2020-06-01', '2020-10-03', '2020-12-25', '2020-12-26',
'2021-01-01', '2021-04-02', '2021-04-05', '2021-05-01', '2021-05-13', '2021-05-24', '2021-10-03', '2021-12-25', '2021-12-26')
THEN 'Working Day' ELSE 'Non Working Day' END as day_type
FROM
generate_series('2017-12-31', '2022-01-01', '1 day'::interval) i
WHERE
i::date < CURRENT_DATE
ORDER BY
date DESC
解决方案
我想获取当前日期之前的一个月的工作日数
只是:
select sum( (extract(dow from d) between 1 and 5)::int ) month_working_days_till_date
from generate_series(date_trunc('month', now()) , now(), interval '1 day') x(d)
generate_seires()
生成从月初到今天的一系列日期。然后我们做一个sum()
只计算工作日的条件。请注意,这没有考虑潜在的假期(为此,您需要一个日历表)。
| month_working_days_till_date | | ---------------------------: | | 17 |
推荐阅读
- python - 绘制排序值
- mysql - Delphi 和 MySQL - 定期弹出数据库错误 - 如何修复它?
- ansible - Ansible - 'delegate_to' 超时连接到远程主机
- if-statement - POWER BI - if 条件下的最大值
- vue.js - 如何从组件 A 触发组件 B 上的 v-show
- java - Swing——懒惰更新
- c# - 错误:传递给 LEFT 或 SUBSTRING 函数的长度参数无效
- c# - Azure Redis 连接问题
- python - 使用请求 python 在谷歌上进行简单查询时出现错误 429
- hangouts-chat - 同步响应消息,然后异步更新该消息