我有以下问题:
在Microsoft的SQL Server中,我有一个表格,其中存储了一年和一个日历周(从星期一开始)。 现在,我想写一个函数,它返回这个日历周开始的月份(即如果星期一是7月31日,它应该返回“7”)。 我没有找到实现此任务的内置函数,我不知道如何轻松实现。所以我希望你的帮助和想法!
提前致谢, 梅尔文
答案 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