使用TSQL我需要在一个月内获得ISO周数,以获得ISO年份周数。
例如:以下代码将给出12/31/2001的第1周,这是正确的。这是2002年的第一个星期一,也是ISO 2002年的第一天。
select DATEPART(ISO_WEEK, '12-31-2001'); --Week 1 January 2002
我的问题是我该如何......
(1)参加ISO周数示例:2016年4月4日(4月第1周)的ISO年份周数:14。
(2)现在参加ISO年份第14周,并返回上个月的4月月份周数= 1。
SQL Server中似乎没有任何内容可以从ISO年份周编号获得ISO月份周#。我有一个我写的功能,但它有一些黑客让它工作,但不是100%。
答案 0 :(得分:0)
我想你想要这样的东西......但我不确定你为什么需要ISO_WEEK。只需用您的列替换getdate()即可。
select datepart(wk, getdate()) - datepart(wk,dateadd(m, DATEDIFF(M, 0, getdate()), 0)) + 1
答案 1 :(得分:0)
在尝试处理函数中获取ISO月份周数后,我决定更简单的解决方案是在SQL Sever中创建ISO_Calendar表。
我们知道在TSQL中您可以获得ISO年份编号和ISO年份编号的一些工作。 ISO月份周数是另一个故事。
我通过填充ISO月号以外的所有列来构建下面显示的表,其中包含2000到2040的数据。然后在第二遍中,我循环遍历表格并根据星期一日期中的月份#设置ISO月份编号。
现在,如果我想获得日期的ISO月号,我会在周一和周日之间查看@Date。在我的情况下,我只关注周一和周五之间的日期,因为这是针对股票分析网站。
select @ISOMonthWeekNo = c.ISOMonthWeekNo
from ISO_Calendar c
where @TransDate between c.Monday and c.Sunday;
优点是该表是一次性构建,更容易验证数据的准确性。