TSQL ISO年周编号的ISO月周编号

TSQL ISO年周编号的ISO月周编号,tsql,Tsql,使用TSQL,我需要在一个月内获得给定ISO年周数的ISO周数 例如:以下代码将为我提供2001年12月31日的第1周,这是正确的。这是2002年的第一个星期一,也是国际标准化组织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 S

使用TSQL,我需要在一个月内获得给定ISO年周数的ISO周数

例如:以下代码将为我提供2001年12月31日的第1周,这是正确的。这是2002年的第一个星期一,也是国际标准化组织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%

我想你想要这样的东西。。。但我不确定你为什么需要ISO_周。只需用列替换getdate()

select datepart(wk, getdate()) - datepart(wk,dateadd(m, DATEDIFF(M, 0, getdate()), 0)) + 1

我想你想要这样的东西。。。但我不确定你为什么需要ISO_周。只需用列替换getdate()

select datepart(wk, getdate()) - datepart(wk,dateadd(m, DATEDIFF(M, 0, getdate()), 0)) + 1

在尝试在函数中获取ISO月周数后,我决定一个更简单的解决方案是在SQLServer中创建一个ISO_日历表

我们知道,在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月周数后,我决定一个更简单的解决方案是在SQL Server中创建ISO_日历表

我们知道,在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_周数计算月份(1月为第1周,12月为第52周)吗?嗨,贝丝,我是在问如何在一个月内计算周数。假设2016年国际标准化组织第14周=2016年4月4日(4月第1周)。我更新了上面的问题。谢谢你,你是在问如何根据ISO_周编号获取月份(1月为第1周,12月为第52周)吗?嗨,贝丝,我是在问如何在一个月内获取周@。假设2016年国际标准化组织第14周=2016年4月4日(4月第1周)。我更新了上面的问题。谢谢你我感谢你的回复,我需要ISO月周,因为我使用ISO年。。您的代码将返回月周数,但由于ISO年份可能有53周,如果您尝试在2001年12月31日运行它,您将得到12月6日,但对于ISO,该月将进入2002年,因为1月1日为一周,1选择datepart(wk,'12-31-2001')-datepart(wk,dateadd(m,DATEDIFF(m,0,'12-31-2001'),0))+1。请参阅此ISO日历。啊,我看到@RegencySoftware了。谢谢你的回复,我需要ISO月周,因为我使用ISO年。。您的代码将返回月周数,但由于ISO年份可能有53周,如果您尝试在2001年12月31日运行它,您将得到12月6日,但对于ISO,该月将进入2002年,因为1月1日为一周,1选择datepart(wk,'12-31-2001')-datepart(wk,dateadd(m,DATEDIFF(m,0,'12-31-2001'),0))+1。请参阅此ISO日历。啊,我看到@RegencySoftware了