【问题标题】:SQL Setting Week Numbers For Months From Monday to SundaySQL设置周一到周日月份的周数
【发布时间】:2014-04-07 14:42:42
【问题描述】:

我正在尝试在表格中设置月份的周数。逻辑是第一周从每月的第一天开始,直到第一个星期日,其余的几周从之后的每个星期一开始。不过,我在实现这一点时遇到了麻烦。有任何想法吗?我的代码看起来像这样。

我之前在这里得到了帮助,以类似的方式设置全年的周数。如下所示:

UPDATE [DimTime] 
SET [WeekNumberOfYear] = DATEPART(WEEK,[Date]) - CASE WHEN DATEPART(WEEKDAY,[Date])     in (1) THEN 1 ELSE 0 END

【问题讨论】:

  • 你能举一些例子吗?
  • 我假设 2013 年 12 月 1 日星期日将使整周成为第 1 周
  • 当前月份 2013-04-01 到星期日的示例为第 1 周。接下来的 3 周为第 2、3、4 周。在 2012-04-28 的星期一、星期二,周三是第 5 周,下个月的周四、周五、周六和周日是 5 月的第 1 周。

标签: sql sql-server datetime


【解决方案1】:

这应该会给你一个正确的结果:

UPDATE [HMDBDataMartBOS].[dbo].[Dimension.DimTime] 
SET [NaturalWeekNumberOfYear] = datediff(d, datediff(d, 0, 
dateadd(m, datediff(m, 0, [Date]), 0))/7*7 - 7,[Date])/7

【讨论】:

  • 谢谢!这几乎正​​是我正在寻找的,除了例如从星期一开始的本月的最后一周有 2 天,周数应该只为这两天设置,当新月开始时,周数应该回到 1 . 这会将上周的周数设置回 1,即使它仍在同一个月内。
  • @Tartarus14 现在我明白了,给你。具有输入和预期输出的示例通常有助于理解问题。遗憾的是,像这样的复杂方程很少有人支持
  • 是的,这完全符合我的要求。谢谢你。我需要提高我的 SQL 技能,但我们总是感谢您的帮助。再次感谢。
  • @Tartarus14 这种复杂性不是最好的起点
【解决方案2】:

这样的?

--Sample data
DECLARE @bob TABLE(dat DATE)
INSERT INTO @bob VALUES ('2012/04/01'), ('2012/04/06'), ('2012/04/07'), ('2012/04/08'),('2012/04/15'),('2012/04/30')

SET DATEFIRST 1 -- make Monday the first day of the week

--and the results
SELECT DATEPART(DAY,dat)/7 + 1 MonthWeek
FROM @bob

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-12
    相关资源
    最近更新 更多