【问题标题】:How to calculate Last Week of Month by WeekNO and Year in SQL如何在 SQL 中通过 WeekNO 和 Year 计算每月的最后一周
【发布时间】:2011-03-18 13:00:24
【问题描述】:

我想在 SQL 中计算上周月数。我有周数和年份。

例如。如果我通过 WeekNo=51 , Year=2008 ,那么函数应该返回 LastWeekofMonth= 52。

我想使用以下标准计算周数。

根据在瑞典使用的 ISO 8601:1988,一年中的第一周是在新年中至少有四天的第一周。

因此,如果您的一周从星期一开始,则任何一年的第一个星期四都在第一周内。您可以从中获取 DateAdd 或 DateDiff。

请帮帮我…………

提前致谢。

【问题讨论】:

  • 那么,您想要该月最后一个星期一的周数吗?
  • 什么数据库*?哪个版本?这些东西通常不是标准化 SQL 语言规范的一部分,但通常是特定于供应商的
  • @DOK...我想要本月最后一个星期四的周数...

标签: sql date


【解决方案1】:
SELECT WEEK(LAST_DAY(STR_TO_DATE('2008-51-Mon', '%x-%v-%a')));

应该使用 MySQL 获取最后一周的月份数:

我首先转换为日期,然后得到该月的最后一天(此处为:2008-12-31),然后计算该月最后一天的周数 (52)。

应该很容易把它变成一个函数。

希望这会有所帮助。

【讨论】:

    【解决方案2】:

    如果您使用日历表,这相当简单。此查询给出了您需要的月份。

    select iso_year, month_of_year
    from calendar c
    where iso_year = 2008 and iso_week = 51
    group by iso_year, month_of_year
    --
    iso_year  month_of_year
    2008      12
    

    因此,您可以使用该结果在日历表上进行连接,如下所示。

    select max(c.iso_week) as last_week_of_month
        from calendar c
        inner join 
            (select iso_year, month_of_year
             from calendar c
             where iso_year = 2008 and iso_week = 51
             group by iso_year, month_of_year) m
        on m.iso_year = c.iso_year and m.month_of_year = c.month_of_year;
    --
    last_week_of_month
    52
    

    这是一个example of a calendar table,但它在 CHECK 约束方面非常薄弱。

    【讨论】:

    • 高度推荐日历表的概念。想知道 Y 和 Z 之间有多少个 X?写一个查询!
    【解决方案3】:

    如果您使用的是 SQL Server,则可以使用主表执行计算,而无需创建日历表。 This fellow 给了你一个很好的解释,我推荐你阅读。他的用于计算每个月的第一个和最后一个星期日的 SQL 可以适应您的使用:

    declare @year int
    set @year =2011 
    
    select min(dates) as first_sunday,max(dates) as last_sunday from
    (
    select dateadd(day,number-1,DATEADD(year,@year-1900,0))
    as dates from master..spt_values
    where type='p' and number between 1 and
    DATEDIFF(day,DATEADD(year,@year-1900,0),DATEADD(year,@year-1900+1,0))
    ) as t
    where DATENAME(weekday,dates)='sunday'
    group by DATEADD(month,datediff(month,0,dates),0)
    

    编辑:一旦你有了星期四的日期,你就可以像这样从那个日期获得周数:

    DECLARE @Dt datetime
    
    SELECT @Dt='02-21-2008'
    
    SELECT DATEPART( wk, @Dt)
    

    【讨论】:

    • 我想要每月最后一个星期四的周数......即。在 2011 年 3 月..Last Week Number 为 13(3 月的最后一个星期四是 2011 年 3 月 31 日。)。所以这样我想要本月的最后一周,我有 WeekNo 和 Year..
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多