【问题标题】:Get Weeks in SQL在 SQL 中获取周数
【发布时间】:2010-02-18 18:01:20
【问题描述】:

我确定我在这里忽略了一些非常基本的东西,但是在查询和谷歌搜索了大约一个小时后,我无法理解它。

如果有帮助的话,我已经有一个日期表了。它填充了过去几年的日期,并通过由服务器上的作业运行的存储过程每晚更新。

我需要做的是把周一到周日的时间拉出来,这样我就可以将它们正确地加入到一个跟踪表中,以获得每周的命中图。出于显而易见的原因,我不想写出 52 个逐渐变大的 select 语句并将它们合并,而且我不喜欢游标的想法。

我已经用了几个月和几天的时间来完成这项工作,但由于某种原因,几周的性质让我感到困惑,或者它本质上是不同的。

关于如何在没有游标或巨大的选择/联合的情况下自动化流程有什么想法吗?如果绝对有必要,我会每晚将光标放入表格中,但我希望不会。

仅供参考,最后我想要的格式是:

[Week number] | [StartDate] | [EndDate]

每周

【问题讨论】:

  • 您使用的是什么 DBMS?
  • 数据库是 Sql 2k5。在我的辩护中,它被标记为 sql :)
  • @C Bauer:在我们的辩护中,SQL 指的是“结构化查询语言”,一种数据库编程语言:en.wikipedia.org/wiki/SQL :)

标签: sql sql-server date report


【解决方案1】:

我可能不同意你想要的东西,但听起来你想要这种东西:

——例如2009 年按周分组的记录数

SELECT DATEPART(wk, DateField) AS WeekNumber, COUNT(*) AS HitsForWeek
FROM SomeTable
WHERE DateField >= '20090101' AND DateField < '20100101'
GROUP BY DATEPART(wk, DateField)

【讨论】:

  • 谢谢,这不是我想要的,但它让我走上了正轨!
【解决方案2】:

还有一点——AdaTheDev 的答案是正确的,但默认情况下它会给你周日到周六的周。如果你想从周一到周日,你必须执行

SET DATEFIRST 1

将一周的第一天设置为星期一 (1)。您可以查询@@DateFirst 以查看您的设置——在美国英语配置中,默认设置为 7(星期日)。

【讨论】:

    【解决方案3】:

    我也发现周很棘手,下面是我用来将日期转换为其日期周组的代码。以下示例将在周五或周一开始的周末返回,而无需维护支持表。如果您想使用周六和周日,您也可以将它们调整为使用。

    --Returns the weekending (Friday) for a particular day
    SELECT DATEADD(day, -DATEPART(weekday,yourDate), yourDate)+6
    
    --Returns the week commencing (Monday) for a particular day
    SELECT DATEADD(day, -DATEPART(weekday,yourDate)+2, yourDate)
    

    编码愉快:)

    【讨论】:

      【解决方案4】:

      您可能更喜欢使用datediff(day, '19800107', yourDate) / 7(其中 1980 年 1 月 7 日是已知的星期一),这样您就不必担心系统何时认为一周已经开始。此外,这种机制很容易适应不同的星期,而不必考虑@@DATEFIRST 的值,只需选择一个已知的星期日,或一个已知的星期四,或其他任何东西。

      【讨论】:

        猜你喜欢
        • 2013-03-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-05-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多