【问题标题】:Find number of days in a given week according to the month for a given date. in SQL根据给定日期的月份查找给定一周中的天数。在 SQL 中
【发布时间】:2022-08-03 01:43:04
【问题描述】:

考虑日期“2022-07-02”

7 月的第一周只有 3 天。

我需要找到给定日期一周中的天数。

在上述日期中,一周有 3 天“2022-07-02”所在的日期。

示例 2:

2022 年 6 月的第一周一周有 5 天

因此,如果我将日期声明为“2022-06-03”,它应该将一周中的天数传递为 5

我需要一个查询来查找特定周的天数。

  • 另外,哪一周没有7天..?我能想到的只有一年中的最后一周,第一个可以是 ISO 周,但这些日期似乎不是财政年度的最后几周或第一周。
  • 一周总是有7天。这似乎是在询问同一个月的一周中的几天。请确认。此外,答案将取决于一周的开始日期,通常是星期日或星期一。请澄清这一点。
  • @GregPavlik 是的,我在特定月份需要它。
  • 例如:2022 年 5 月在日历中有 6 周。如果我将日期指定为“2022-05-01”,而仅考虑 5 月,则可能 1 日所在的一周只有一天,即星期日。

标签: sql sql-server


【解决方案1】:
set datefirst 1 -- assumes Monday is set as start of week
declare @myDate date = getdate();
-- calculate the next last day of week
declare @nextSunday date = dateadd(day, 7 - datepart(weekday, @myDate), @myDate);
select case
     -- advancing into the next month implies a partial week
     -- datediff(month, @myDate, nextSunday) = 1 would be equivalent
     when day(@nextSunday) < day(@myDate) then 7 - day(@nextSunday)
     -- else see if still within first week
     when day(@nextSunday) < 7 then day(@nextSunday)
     else 7 end;

在查询中,您可以这样使用它:

select case
     when day(nextSunday) < day(dateColumn) then 7 - day(nextSunday)
     when day(nextSunday) < 7 then day(nextSunday)
     else 7 end
from
    myData cross apply (
        values (dateadd(day, 7 - datepart(weekday, dateColumn), dateColumn))
    ) v(nextSunday);

https://dbfiddle.uk/?rdbms=sqlserver_2019&fiddle=ee5bfb52dabe31dd619cfd136689db59

如果您不想要速记形式,那么只需将最后一步中的每个 nextSunday 实例替换为其完整表达式即可。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-12
    • 2020-12-08
    • 1970-01-01
    • 2017-08-30
    • 1970-01-01
    • 2023-03-19
    • 2012-03-23
    • 2021-09-21
    相关资源
    最近更新 更多