【问题标题】:How to get week of year in SQL with calendar rule?如何使用日历规则在 SQL 中获取一年中的一周?
【发布时间】:2018-05-07 15:46:25
【问题描述】:

在 .NET C# 中有 Calendar.GetWeekOfYear 方法

public virtual int GetWeekOfYear(
DateTime time,
CalendarWeekRule rule,
DayOfWeek firstDayOfWeek)

其中有一个参数“CalendarWeekRule”来定义规则。 就我而言,我使用 CalendarWeekRule.FirstFourDayWeek 断言一周需要在同一个月中有 4 天才能被视为一周。

https://msdn.microsoft.com/en-us/library/system.globalization.calendar.getweekofyear(v=vs.110).aspx

如何在 SQL 中执行此操作? 有没有等价的功能?

【问题讨论】:

  • 仅供参考:ISO 8601 定义了一年中的第几周,并将星期一作为一周的第一天,并规定该周在其所属的一年中必须至少有 4 天(所以如果 1 月 1 日落在Mon-Thu,属于本年度,但如果是Fri-Sun,则属于上一年最后一周的一部分,可能是上一年的第52周或第53周。您必须获得“一年中的某一天”值(1 月 1 日为 1,12 月 31 日为 365 或 366),以及一年中 1 月 1 日的“星期几”,并用算术进行计算。
  • @JonathanLeffler 谢谢。是否可以选择使用星期日作为一周的第一天而不是星期一?

标签: sql sql-server date datetime calendar


【解决方案1】:
DATEPART ( wk, date ) 

这将返回从您提供的日期开始的一周的整数。 DATEPART的更多参数在这里是链接! DATEPART TSQL

编辑:正如您在 cmets 中提出的问题,您可以使用 SET DATEFIRST = (see values here) 更改一周的第一天

【讨论】:

  • 谢谢,很有帮助
  • sql server 使用 System.Globalization.CalendarWeekRule.FirstDay 的 .net 等价物
【解决方案2】:

在 SQL 中,如果 table 是 'tblWeekOfYear' 并且 [time] 是 DateTime 字段,则它会计算 DateTime 字段中两个不同日期'2017-10-01' and '2017-10-02' 的第几周。

Select Distinct DatePart(ww, [time]) as WeekNo
from tblWeekOfYear where [time] between '2017-10-01' and '2017-10-02';

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-31
    • 1970-01-01
    • 1970-01-01
    • 2010-12-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多