SQL Server返回意外的周数

the*_*ner 8 t-sql sql-server-2008

我在表中有一些订单,2011年的最后订单日期是12月20日.

我正在使用sql命令来计算给定周内的订单数量:

SELECT CONVERT(VARCHAR(3),DATENAME(week,convert(datetime,order_date,103))) AS week, 
  COUNT(1) as orders 
FROM order_table 
where DATENAME(YEAR,convert(datetime,order_date,103)) = '2011' 
GROUP BY CONVERT(VARCHAR(3),DATENAME(week,convert(datetime,order_date,103))) 
order by week asc
Run Code Online (Sandbox Code Playgroud)

它返回了以下一些结果:

Week | Orders  
41   | 42  
42   | 110  
43   | 115  
...
...  
51   | 155  
52   | 15
Run Code Online (Sandbox Code Playgroud)

这样做的问题在于,我提到的2011年最后一个订单日期是2011年12月20日,不能是52周,所以必须是第51周.

我有一些其他的统计数据(关闭另一个系统,而不是SQL服务器),它给了我一些其他的数据,上一周是51,我毫无疑问是正确的.如果人们都在寻找这两个问题,那么将会有一个问题!

任何人都有任何想法或知道如何排序这个?

谢谢,

t-c*_*.dk 10

2011年12月20日的iso_week是51.所以也许这就是你所需要的.

SELECT datepart(iso_week, '2011-12-20')
Run Code Online (Sandbox Code Playgroud)

  • @Ben:实际上,"WEEK"可以有53或54周.使用`ISO_WEEK`,您将拥有52或53(因为这将是任何给定年份的星期四数). (3认同)

Bri*_*dge 0

SELECT DatePart(WEEK,order_date) AS WeekOfYear
FROM order_table
Run Code Online (Sandbox Code Playgroud)

应该给你周数。