Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在SQL中按周和年计算月的最后一周_Sql_Date - Fatal编程技术网

如何在SQL中按周和年计算月的最后一周

如何在SQL中按周和年计算月的最后一周,sql,date,Sql,Date,我想用SQL计算上周的月数。我有周数和年数 如果我通过WeekNo=51,Year=2008,那么函数应该返回LastWeekofMonth=52 我想用以下标准计算周数 根据瑞典使用的ISO 8601:1988,一年中的第一周是新年中至少有四天的第一周 因此,如果你的一周从周一开始,那么一年中的第一个周四就在第一周之内。您可以从中选择DateAdd或DateDiff 请帮帮我 提前感谢。如果您使用日历表,这相当简单。此查询给出了您需要的月份 select iso_year, month_of_

我想用SQL计算上周的月数。我有周数和年数

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

我想用以下标准计算周数

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

因此,如果你的一周从周一开始,那么一年中的第一个周四就在第一周之内。您可以从中选择DateAdd或DateDiff

请帮帮我


提前感谢。

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

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
这里有一个,但它在检查约束方面非常薄弱

SELECT WEEK(LAST_DAY(STR_TO_DATE('2008-51-Mon', '%x-%v-%a')));
应使用MySQL获取最后一周的月数:

我首先转换为一个日期,然后得到一个月的最后一天(这里是:2008-12-31),然后计算一个月最后一天的一周(52)

将其转换为函数应该很容易


希望这有帮助。

如果您使用的是SQL Server,则可以使用主表执行计算,而无需创建日历表。给你一个很好的解释,我建议你读一下。他计算每个月第一个星期日和最后一个星期日的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)

那么,您想要本月最后一个星期一的周数?什么数据库*?哪个版本?这些东西通常不是标准化SQL语言规范的一部分,但通常是由供应商提供的-specific@DOK... 我想要一个月内最后一个星期四的周数…高度推荐日历表的概念。想知道Y和Z之间有多少个X吗?写一个查询!我要本月最后一个星期四的星期数。2011年3月最后一周的数字是13(3月最后一个星期四是2011年3月31日)。所以我希望这样的话,每月的最后一周,我有一个周末和一年。。