Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.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 server 为什么SQL在2011年1月1日返回第1周?_Sql Server_Sql Server 2005 - Fatal编程技术网

Sql server 为什么SQL在2011年1月1日返回第1周?

Sql server 为什么SQL在2011年1月1日返回第1周?,sql-server,sql-server-2005,Sql Server,Sql Server 2005,我把日期定在7点。现在,当我运行以下SQL时,它将返回第1周: SET DateFirst 7 SELECT DATEPART(wk, '1/1/2011') as WeekNumber 如果我的开始日设置为7,我不知道为什么会返回到第1周。根据我的说法,第一周应该从2011年1月2日开始,也就是周日。如何更正此问题?来自 周(周,ww)datepart反映了对设置DATEFIRST所做的更改。 任何一年的1月1日都定义了该周的起始编号 datepart,例如:datepart(wk,'Jan

我把日期定在7点。现在,当我运行以下SQL时,它将返回第1周:

SET DateFirst 7
SELECT DATEPART(wk, '1/1/2011') as WeekNumber
如果我的开始日设置为7,我不知道为什么会返回到第1周。根据我的说法,第一周应该从2011年1月2日开始,也就是周日。如何更正此问题?

来自

周(周,ww)datepart反映了对设置DATEFIRST所做的更改。 任何一年的1月1日都定义了该周的起始编号 datepart,例如:datepart(wk,'Jan 1,xxxx')=1,其中xxxx是 任何一年

所以:因为它是这样定义的

编辑:您可以在SQL-SERVER中修复此问题。使用类似以下内容:

DATEPART(wk, 
  DATEADD(day, 
    -( (DATEPART(day, date) + 8 - DATEPART(weekday, date)) % 7 - 1),
    date
  )
)
这段代码的作用是,使用一年中的当前日期和工作日来计算哪一天是一年中的第一个星期日,然后从当前日期中减去该天,给出一个虚拟日期,其中一年从星期日开始,然后取该日期的周数,根据您的定义,周数应等于周数。

From

周(周,ww)datepart反映了对设置DATEFIRST所做的更改。 任何一年的1月1日都定义了该周的起始编号 datepart,例如:datepart(wk,'Jan 1,xxxx')=1,其中xxxx是 任何一年

所以:因为它是这样定义的

编辑:您可以在SQL-SERVER中修复此问题。使用类似以下内容:

DATEPART(wk, 
  DATEADD(day, 
    -( (DATEPART(day, date) + 8 - DATEPART(weekday, date)) % 7 - 1),
    date
  )
)
这段代码的作用是,使用一年中的当前日期和工作日来计算哪一天是一年中的第一个星期日,然后从当前日期中减去该天,给出一个虚拟日期,其中一年从星期日开始,然后取该日期的周数,根据您的定义,它应该等于周数。

还有ISO周

第01周有相互等效的定义:

  • 一年中第一个星期四所在的一周
  • 1月4日的一周
  • 开始年份中的第一周(四天或四天以上),以及
  • 从12月29日至1月4日期间的星期一开始的一周
如果1月1日在星期一、星期二、星期三或星期四,则在第01周。如果1月1日是星期五、星期六或星期日,则是前一年的第52周或第53周

还有ISO周

第01周有相互等效的定义:

  • 一年中第一个星期四所在的一周
  • 1月4日的一周
  • 开始年份中的第一周(四天或四天以上),以及
  • 从12月29日至1月4日期间的星期一开始的一周
如果1月1日在星期一、星期二、星期三或星期四,则在第01周。如果1月1日是星期五、星期六或星期日,则是前一年的第52周或第53周


我明白了。我有办法改变这个吗?我需要在一年中的第一个星期天开始第一个星期。我从SQL本身调用这个。我有一个无法粘贴的大型SQL,但基本上我所关心的是对我们来说正确的周数。从xNo中选择DatePart(dw,MyDateColumn),您不是从SQL中调用SQL。您正在以某种方式从某种语言调用SQL。我并不是说在SQL之外修复它会有帮助(如果你只是在调用代码中使用它,因为你可以在使用它之前对它进行处理;例如,如果你想对它进行排序,它不会有帮助)我正在运行一个SQL脚本,所以不,我不是从任何其他代码语言调用它。给你。我做了一个编辑,使用SQL和一些SQL-SERVER函数来计算您要查找的周数。我不确定这是否是最有效的方法,但我认为应该有效。我明白了。我有办法改变这个吗?我需要在一年中的第一个星期天开始第一个星期。我从SQL本身调用这个。我有一个无法粘贴的大型SQL,但基本上我所关心的是对我们来说正确的周数。从xNo中选择DatePart(dw,MyDateColumn),您不是从SQL中调用SQL。您正在以某种方式从某种语言调用SQL。我并不是说在SQL之外修复它会有帮助(如果你只是在调用代码中使用它,因为你可以在使用它之前对它进行处理;例如,如果你想对它进行排序,它不会有帮助)我正在运行一个SQL脚本,所以不,我不是从任何其他代码语言调用它。给你。我做了一个编辑,使用SQL和一些SQL-SERVER函数来计算您要查找的周数。我不确定这是否是最有效的方法,但我认为它应该有效。这似乎是解决办法。这似乎是解决办法。