【问题标题】:Date of last day of week in Firebird 3Firebird 3 中一周最后一天的日期
【发布时间】:2020-04-23 21:43:18
【问题描述】:

这是 Firebird 3 中一周的第一天(星期一)的日期:

DATEADD(DAY, (EXTRACT(WEEKDAY FROM D - 1) * -1), D)

以及如何获取一周中最后一天(星期日)的日期?

在 Firebird 中:周一 = 1,周二 = 2,...周日 = 0。

【问题讨论】:

    标签: sql date firebird


    【解决方案1】:

    对于 ISO-8601 周,星期一是一周的第一天,您还可以使用以下方法确定星期一:

    dateadd(day, 0 - mod(extract(weekday FROM d) + 6, 7), d)
    

    mod(extract(weekdays from d) + 6, 7) 的使用将使星期一 0、星期二 1 等和星期日 6 更容易计算。

    然后您可以使用以下方法确定星期日:

    dateadd(day, 6 - mod(extract(weekday FROM d) + 6, 7), d)
    

    您可以通过这种方式轻松得出一周中的其他日子(例如,使用 1 - mod(extract(weekday FROM d) + 6, 7) 表示星期二等。

    另一方面,如果星期日是一周的第一天(例如在美国),您可以使用:

    dateadd(day, 0 - extract(weekday from d), d)
    

    星期一

    dateadd(day, 1 - extract(weekday from d), d)
    

    【讨论】:

    • SELECT DATEADD(DAY, 0 - MOD(EXTRACT(WEEKDAY FROM DATE '2020-01-12') + 6, 7), DATE '2020-01-12') 从 RDB$DATABASE 为什么您的代码于 2020 年 6 月 1 日返回?这是错误的。
    • @Akella225 我假设 ISO-8601 标准是星期一是一周的第一天,在 ISO-8601 中,星期一 2020-01-06 和星期日 2020-01-12 在同一周。如果您正在寻找周日是一周的第一天的语言环境的答案,请参阅我的答案的第二部分:dateadd(day, 1 - extract(weekday from d), d)
    • 我需要一周的最后一天 - 星期日 06/01/2020 或 12/01/2020 或 19/01/2020
    • 今天是 2020-01-06,那是 星期一。我的回答首先描述了派生星期一的另一种方法,然后为您提供了一种派生星期日的方法(使用dateadd(day, 6 - mod(extract(weekday FROM d) + 6, 7), d)。星期日的代码是第二个代码示例,而不是第一个。
    • 对不起,我需要一周的最后一天 - 星期日 05/01/2020 或 12/01/2020 或 19/01/2020
    猜你喜欢
    • 2013-11-22
    • 2016-11-29
    • 1970-01-01
    • 2018-02-09
    • 2021-08-26
    • 2021-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多