【问题标题】:How to get specific weekday from date period?如何从日期期间获取特定的工作日?
【发布时间】:2019-09-25 13:19:14
【问题描述】:

我正在尝试计算一个月或不同时间段内的特定工作日。

在我的例程中,我有 startDate 和 endDate,它们表示我试图找到工作日的时间段的开始和结束。

我知道如何计算从开始日期到结束日期的天数。

select
   date_part('day',age('2010-04-10', '2010-04-05'));

给我一​​个输出:5

这给了我一天的名字:

to_char(current_date, 'day')

示例:“星期一”。

我有一个名为 RecurrentWeekDay 的变量(具有像 'monday'、'tuesday'.. 之类的值),我想检查是否有 weekDay 与 RecurrentWeekDay 名称匹配(例如,如果 RecurrentWeekDay 是 'monday',我需要检查 startDate 和 EndDate 之间是否有星期一)。

【问题讨论】:

    标签: sql postgresql


    【解决方案1】:

    demo:db<>fiddle

    您可以使用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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-06-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多