试试这个并根据自己的需要使用变量@dt:
DECLARE @dt DATETIME = GETDATE()
SELECT WeekOfMonth = DATEPART(wk, @dt) - DATEPART(wk,DATEADD(m, DATEDIFF(M, 0, @dt), 0)) + 1
编辑:
我的错,因为我错误地理解了这个问题,我的解决方案返回了当月的一周,而不是一年。
使用@Dems 的部分答案并在此处更改我的答案是一个完整的工作测试,该测试基于临时表上可用的日期和财政年度的开始输出 3 列 WeekOfMonth、WeekOfYear 和 WeekOfFIscalYear。但我想对于一家特定的公司来说,一个财政年度的开始总是一样的。我只是添加了不同的日期和年份进行测试。
DECLARE @TT TABLE (auxVal INT,
auxdate DATETIME,
fiscal_year DATETIME
)
INSERT @TT
SELECT 100,'19120101 00:00:00','19120701' UNION ALL
SELECT 200,'18120615 00:00:00','18110701' UNION ALL
SELECT 100,'20121121 00:00:00','20120701' UNION ALL
SELECT 200,'20120101 00:00:00','20110701' UNION ALL
SELECT 100,'20150802 00:00:00','20140701' UNION ALL
SELECT 200,'20120330 00:00:00','20110701' UNION ALL
SELECT 322,'20110228 00:00:00','20100701'
SELECT DATEDIFF(week, DATEADD(MONTH, DATEDIFF(MONTH, 0, auxDate), 0), auxDate) + 1 WeekOfMonth,
DATEPART( wk, auxDate) WeekOfYear,
DATEDIFF(DAY, (DATEADD(YEAR, DATEDIFF(YEAR, fiscal_year, DATEADD(MONTH, -7, auxDate)), fiscal_year)), auxDate) / 7 + 1 WeekOfFiscalYear
FROM @TT
结果:
WeekOfMonth WeekOfYear WeekOfFiscalYear
-------------------------------------------
1 1 27
3 25 51
4 47 21
1 1 27
2 32 5
5 13 40
5 10 35
-------------------------------------------