SQL:获取当月第二周的星期五
SQL: Get Friday of Second Full Week of Month
这是一个有趣的方程式。我正在寻找最干净的方法来检索任何给定年份每个月的第二个全周星期五。假设一周从星期一开始。
例子
- 2017 年 11 月 将是 第 17.
- 2017 年 12 月 将是 第 15。
- 2018 年 1 月 将是 12 日。
这些事情通常很有趣,但我现在感觉不到。有什么建议吗?
就我个人而言,我喜欢约会 table 这样的事情,但你也可以算出来:
CASE WHEN datepart(weekday, '2017-12-01')<=5 THEN 7 ELSE 14 END + (7-datepart(weekday, '2017-12-01'))
5
可能需要调整,但我认为这是正确的,因为 datepart(weekday
是基于星期日的,而您是基于星期一的(可能需要 6 才能正确抵消)。
无论如何,这应该会让您大致了解。
一开始这可能不太容易理解,但对于这种特定情况,规则很简单:
weekday = 'Friday' (or whichever way to determine if this day is Friday)
and day_of_month between 12 and 18
如果一周从星期一开始,这将有效。
如果工作周从星期一开始,那么一个月中第二个完整工作周的星期五是
SELECT DATEADD(day, (9 - DATEPART(weekday, @fdom)) % 7) + 11, @fdom)
AS SecondWorkweekFriday;
-- 1. start with the first day of the month (@fdom)
-- 2. advance to the nearest Monday with modular arithmetic
-- n.b.: by default DATEPART considers Monday to be ordinal
-- week day #2, thus "7 - DATEPART() + 2" becomes
-- "9 - DATEPART"
-- 3. add eleven days to get to the second Friday thereafter
其中 @fdom 是该月的第一天。有很多方法可以在 SQL.
中找到 first day of the month
这是一个有趣的方程式。我正在寻找最干净的方法来检索任何给定年份每个月的第二个全周星期五。假设一周从星期一开始。
例子
- 2017 年 11 月 将是 第 17.
- 2017 年 12 月 将是 第 15。
- 2018 年 1 月 将是 12 日。
这些事情通常很有趣,但我现在感觉不到。有什么建议吗?
就我个人而言,我喜欢约会 table 这样的事情,但你也可以算出来:
CASE WHEN datepart(weekday, '2017-12-01')<=5 THEN 7 ELSE 14 END + (7-datepart(weekday, '2017-12-01'))
5
可能需要调整,但我认为这是正确的,因为 datepart(weekday
是基于星期日的,而您是基于星期一的(可能需要 6 才能正确抵消)。
无论如何,这应该会让您大致了解。
一开始这可能不太容易理解,但对于这种特定情况,规则很简单:
weekday = 'Friday' (or whichever way to determine if this day is Friday)
and day_of_month between 12 and 18
如果一周从星期一开始,这将有效。
如果工作周从星期一开始,那么一个月中第二个完整工作周的星期五是
SELECT DATEADD(day, (9 - DATEPART(weekday, @fdom)) % 7) + 11, @fdom)
AS SecondWorkweekFriday;
-- 1. start with the first day of the month (@fdom)
-- 2. advance to the nearest Monday with modular arithmetic
-- n.b.: by default DATEPART considers Monday to be ordinal
-- week day #2, thus "7 - DATEPART() + 2" becomes
-- "9 - DATEPART"
-- 3. add eleven days to get to the second Friday thereafter
其中 @fdom 是该月的第一天。有很多方法可以在 SQL.
中找到 first day of the month