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

时间:2014-01-07 22:16:40

标签: sql sql-server calendar

我有以下问题:

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

提前致谢, 梅尔文

2 个答案:

答案 0 :(得分:1)

<强>查询

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)

编辑:我不得不重新阅读答案并从M.Ali拉出来得到完整答案。如果第一周从前一年开始,您还必须知道正确的年份。如果您一年中的第一周不一定包括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