我试图获取一个月或不同时间段内特定工作日的计数。
在我的例程中,我有startDate和endDate,它们指示我要查找工作日的时间段的开始和结束。
我知道如何获取从开始到结束日期的天数。
select
date_part('day',age('2010-04-10', '2010-04-05'));
给我输出:5
这给了我一天的名字:
to_char(current_date, 'day')
例如:“星期一”。
我有一个名为RecurrentWeekDay的变量(具有“ monday”,“ tuesday”等值。),我想检查是否存在与RecurrentWeekDay名称匹配的weekDay(例如,如果RecurrentWeekDay为“ monday”,则需要检查startDate和EndDate之间是否有星期一)。
答案 0 :(得分:2)
您可以使用generate_series()
生成两个边界之间的所有日期。之后,您可以使用to_char()
来获取他们的工作日。使用IN
比较器,您将获得预期的结果:
SELECT
id,
'Monday' IN (
SELECT to_char(generate_series(start_date, end_date, interval '1 day'), 'FMDay')
)
FROM
mydates
因为始终包含星期几,所以如果日期差等于或大于6,则可以优化以仅计算小于6的日期序列:
SELECT
id,
CASE WHEN end_date - start_date >= 6 THEN true
ELSE 'Monday' IN (
SELECT
to_char(
generate_series(start_date, end_date, interval '1 day'),
'FMDay'
)
)
END AS is_in
FROM
mydates