Sql 使用datepart计算1月1日的错误美国周数
SQL server函数有两个选项可用于检索周数;Sql 使用datepart计算1月1日的错误美国周数,sql,sql-server,sql-server-2016,week-number,datepart,Sql,Sql Server,Sql Server 2016,Week Number,Datepart,SQL server函数有两个选项可用于检索周数; ISO_周和周。我知道两者之间的区别,我希望有一周的数字基于周日开始的标准,就像在美国一样;i、 e.周。但它没有像我预期的那样处理部分周。e、 g SELECT DATEPART(WEEK,'2015-12-31') --53 SELECT DATEPART(WEEK,'2016-01-01') --1 SELECT DATEPART(WEEK,'2016-01-03') --2 为一周提供两个不同的周数,分为两年。我想在
ISO_周
和周
。我知道两者之间的区别,我希望有一周的数字基于周日开始的标准,就像在美国一样;i、 e.周
。但它没有像我预期的那样处理部分周。e、 g
SELECT DATEPART(WEEK,'2015-12-31') --53
SELECT DATEPART(WEEK,'2016-01-01') --1
SELECT DATEPART(WEEK,'2016-01-03') --2
为一周提供两个不同的周数,分为两年。我想在下面的链接中实现一些类似的东西
基本上我想要这样的东西
SELECT DATEPART(WEEK,'2015-12-31') --1
SELECT DATEPART(WEEK,'2016-01-01') --1
SELECT DATEPART(WEEK,'2016-01-03') --2
编辑:
基本上,我不擅长将一周分成两周,我必须根据周数进行一些计算,而事实上,将一周分成两周是不可接受的。因此,如果上述方法不可行
第一周是否可能从2016-01-03开始。i、 e.在这种情况下,我会这样做:
SELECT DATEPART(WEEK,'2015-12-31') --53
SELECT DATEPART(WEEK,'2016-01-01') --53
SELECT DATEPART(WEEK,'2016-01-03') --1
如果希望生成日期的周数,它将返回一年的周数(输入日期)
因此,我认为sql server将“2015-12-31”视为2015年的最后一周。如果您想要美国编号,可以通过获取一周结束时的周数而不是日期本身来实现 首先,确保在系统中,一周的第一天的设置实际上是星期天。您可以通过运行
SELECT@@DATEFIRST
来验证这一点;这应该是周日的7点。如果没有,运行setdatefirst 7代码>第一个
SELECT
end_of_week=DATEADD(DAY, 7-(DATEPART(WEEKDAY, '20151231')), '20151231'),
week_day=DATEPART(WEEK, DATEADD(DAY, 7-(DATEPART(WEEKDAY, '20151231')), '20151231'));
它将返回2016/01/02-1。我同意,特别是因为今天是一年中最后一周的星期四。:-)你能详细说明一下你的确切意思吗?你的输入日期(“2015-12-31”)是2015年,而不是2016年,因此,它将被视为2015年的最后一周,因为这个日期不属于2016年。这基本上返回:2016-01-03-1@SaifUllah取决于一周的第一天在你的系统中是什么。运行选择@@DATEFIRST
,对于星期天,它应该返回7。如果没有,请先运行SET DATEFIRST 7
。