从日历周获取月份(SQL Server)

从日历周获取月份(SQL Server),sql,sql-server,calendar,Sql,Sql Server,Calendar,我有以下问题: 在Microsoft的SQL Server中,我有一个表,其中存储了一年和一个日历周(从星期一开始)。 现在,我想写一个函数,返回这个日历周开始的月份(即,如果星期一是7月31日,它应该返回“7”)。 我还没有找到一个内置函数来完成这项任务,我不知道如何轻松实现这项任务。所以我希望你的帮助和想法 提前感谢,, 梅尔文查询 DECLARE @WEEK INT; DECLARE @YEAR INT; SET @week = 3 SET @year = 2014 SELECT DAT

我有以下问题:

在Microsoft的SQL Server中,我有一个表,其中存储了一年和一个日历周(从星期一开始)。 现在,我想写一个函数,返回这个日历周开始的月份(即,如果星期一是7月31日,它应该返回“7”)。 我还没有找到一个内置函数来完成这项任务,我不知道如何轻松实现这项任务。所以我希望你的帮助和想法

提前感谢,, 梅尔文查询

DECLARE @WEEK INT;
DECLARE @YEAR INT;
SET @week = 3
SET @year = 2014

SELECT DATEPART(MM,CAST(CONVERT(CHAR(3),
                 DATEADD(WW,@WEEK - 1,
                 CONVERT(datetime,'01/01/'+CONVERT(char(4),@Year)))
                 ,100)+ ' 1900' AS DATETIME)) AS [MONTH]
结果

╔═══════╗
║ MONTH ║
╠═══════╣
║     1 ║
╚═══════╝

编辑:我不得不重读答案,从阿里先生那里得到完整的答案。如果前一年的第一周开始,您还必须知道正确的年份。如果一年中的第一周不一定包括1月1日,你可能需要做一些编辑

DECLARE @Week int, @Year int, @Date datetime;

SET @Week = 1
SET @Year = 2014
SET @Date = CAST(@Year as varchar(4)) + '-01-01'
SELECT @Date = DATEADD(ww, @week-1, @Date)

SELECT MONTH(DATEADD(d, (DATEPART(dw,@date)-2)*-1, @date)), 
  CASE WHEN @Week = 1 AND MONTH(DATEADD(d, (DATEPART(dw,@date)-2)*-1, @date)) = 12 
    THEN @YEAR - 1 ELSE @YEAR END as CorrectYear

谢谢,这差不多就是解决办法了。但是我需要的不是'01/01/'+CONVERT(char(4),@Year),而是“真正的”一年中的第一天(ISO),但我想我可以自己解决这个问题,所以我把它作为解决方案。没问题,很高兴它能帮上忙:)这可能是完整的解决方案,但我明天会对特殊情况进行一些测试,看看它是否正常工作。非常感谢。试试这个。选择MONTH(getdate())您可能想尝试
MONTH
请显示值如何存储在表中。请参阅M.Ali的答案,他提供了我需要的解决方案。