Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 使用datepart计算1月1日的错误美国周数_Sql_Sql Server_Sql Server 2016_Week Number_Datepart - Fatal编程技术网

Sql 使用datepart计算1月1日的错误美国周数

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 为一周提供两个不同的周数,分为两年。我想在

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
为一周提供两个不同的周数,分为两年。我想在下面的链接中实现一些类似的东西

基本上我想要这样的东西

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