作为报告设置的一部分,我有一个 SQL 查询来获取每周下的订单数:
select datepart(isowk, order_date), count(*)
from orders where year(order_date) = @Year
group by datepart(isowk, order_date), year(order_date)
order by 1
请注意,我在 datepart
函数调用中使用了新的 isowk
格式,因为丹麦的企业通常使用 ISO 周数。
使用 @Year = 2010
运行此查询会产生与此类似的结果集:
1 5
2 7
3 10
...
53 3
你我都知道 2010 年还没有结束,当然还没有第 53 周。实际上,今年的前三天属于 ISO 2009 年第 53 周。虽然可以向其他程序员解释这一点,但阅读我的报告的人永远不会理解这一点。因此,我想通过将数据“移动”到 2009 年来摆脱第 53 周。
我如何重写我的 WHERE
子句以将数据集过滤为定义为 @ 的年份中第 1 周的星期一和最后一周的星期五(52 或 53)之间的订单年份
?
最佳答案
事实上,我不知道任何提供 isoyear 的编程语言......
create function isoyear(@date datetime) returns smallint as begin
declare @isoyear smallint =
case
when datepart(isowk, @date) = 1 and month(@date) = 12
then year(@date)+1
when datepart(isowk, @date) = 53 and month(@date) = 1
then year(@date)-1
else year(@date)
end;
return @isoyear;
end;
希望我们下次能得到一个 datepart(isoyear, ...) ...
关于sql - 使用 T-SQL 查找特定年份任何 ISO 周内的订单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4434112/