gpt4 book ai didi

tsql - SQL DateDiff Weeks - 需要和替代

转载 作者:行者123 更新时间:2023-12-01 23:25:43 26 4
gpt4 key购买 nike

MS SQL DateDiff 函数计算两个日期之间的差异时跨越的边界数。

不幸的是,这不是我所追求的。例如,2012 年 6 月 1 日 -> 2012 年 6 月 30 日跨越 4 个边界,但涵盖 5 周。

是否有我可以运行的替代查询,它会给出一个月相交的周数?

更新

尝试弄清楚我到底在追求什么:

对于任何给定的月份,我需要与该月相交的周数。

此外,对于只采用 datediff 并添加一个的建议,那是行不通的。例如,2010 年 2 月仅与 4 周相交。 DateDiff 调用返回 4,这意味着简单地加 1 会使我得到错误的周数。

最佳答案

注意本义周的计算通常比您想象的要复杂!

如果您使用 Datepart(week, aDate),您会对“周”这个概念做出很多假设。 一周是从星期天还是星期一开始?您如何处理第 1 周和第 5 周之间的过渡。一年中的实际周数根据您使用的周计算规则(first4dayweek、weekOfJan1 等)而有所不同

如果你只是想处理你可以使用的差异

DATEDIFF('s', firstDateTime, secondDateTime) > (7 * 86400 * numberOfWeeks)

如果第一个 dateTime 是 2011-01-01 15:43:22 那么相差是 2011-02-05 15:43:22 之后的 5 周

编辑: 实际上,根据这篇文章:Wrong week number using DATEPART in SQL Server可以现在使用Datepart(isoww, aDate) 获取ISO 8601 周数。我知道 week 坏了,但不知道现在有修复。酷!

如果您将星期一用作一周的第一天,则此方法有效

 set language = british
select datepart(ww, @endofMonthDate) -
datepart(ww, @startofMonthDate) + 1
  1. 日期部分是 language sensistive .通过将语言设置为 british,您可以将星期一设为一周的第一天。
  2. 这将返回 2010 年 2 月和 2012 年 6 月的正确值! (因为星期一而不是星期日是一周的第一天)。
  3. 它似乎还返回了 1 月和 12 月(无论年份)的正确周数。 isoww 参数使用星期一作为一周的第一天,但​​它导致 1 月有时在第 52/53 周开始,而 12 月有时在第 1 周结束(这会使您的 select 语句更复杂)

关于tsql - SQL DateDiff Weeks - 需要和替代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5581816/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com