ISO年份周数的TSQL ISO月份周数

时间:2016-10-03 20:03:48

标签: tsql

使用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%。

2 个答案:

答案 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;

ISO_Calendar

优点是该表是一次性构建,更容易验证数据的准确性。