【问题标题】:How to get date from WeekNumber and WeekDay如何从周数和工作日获取日期
【发布时间】:2019-01-30 23:11:05
【问题描述】:

我有这个带有 WeekNo(年和周)的数据集 - WeekDayName 是有数据的那一天。我需要知道确切的日期。

WeekNo  WeekDayName
------  -----------
201905  Mandag
201905  Mandag
201905  Mandag
201905  Tirsdag
201905  Tirsdag
201905  Tirsdag
201905  Onsdag
201905  Onsdag
201905  Onsdag
201905  Torsdag
201905  Torsdag
201905  Torsdag
201905  Fredag
201905  Fredag
201905  Fredag

想要的结果:

WeekNo  WeekDayName Date
------  ----------- -----
201905  Mandag      2019-01-28
201905  Mandag      2019-01-28
201905  Mandag      2019-01-28
201905  Tirsdag     2019-01-29
201905  Tirsdag     2019-01-29
201905  Tirsdag     2019-01-29
201905  Onsdag      2019-01-30
201905  Onsdag      2019-01-30
201905  Onsdag      2019-01-30
201905  Torsdag     2019-01-31
201905  Torsdag     2019-01-31
201905  Torsdag     2019-01-31
201905  Fredag      2019-02-01
201905  Fredag      2019-02-01
201905  Fredag      2019-02-01

我试过了,但它只给了我一周的开始:

declare @IntWeek as varchar(20) SET @IntWeek = '201905'

SELECT DATEADD(wk, DATEDIFF(wk, @@DATEFIRST, LEFT(@IntWeek,4)+'-01-01') + (cast(RIGHT(@IntWeek,2) as int)-1), @@DATEFIRST) AS StartOfWeek

【问题讨论】:

  • 最好先创建一个[Calendar] 表,其中包含一年中的所有日期,以及无法通过DATEPART 直接计算的额外字段。然后你可以将你的表加入它。
  • @LukStorms 好主意!为什么我没有想到。这可能是一个更可持续的解决方案。谢谢

标签: sql-server tsql sql-server-2017


【解决方案1】:

你可以考虑拥有Calendar Table

之后你可以很容易地得到结果

select date 
from Auxiliary.Calendar 
where Year = CAST(LEFT(@IntWeek,4) as int)
  and Week = CAST(RIGHT(@IntWeek,2) as int)
  and WeekDay = 'Mondag'

【讨论】:

  • 你错过了什么吗?我需要日期。这只是给了我一个日期,基本上和我已经得到的结果一样。
  • 是的,特别是日期。我不知道为什么我没有想出这个,但它显然更容易!所以再次感谢:)
【解决方案2】:

创建一个接收2个参数的函数:

1.- 你一周的第一天

2.- 日期名称

The function must do IF

IF dayName = 'Sunday'
  Return same date
Else If dayName = 'Monday
  Return Data + 1 day

....

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-26
    • 1970-01-01
    • 2010-11-19
    • 2011-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多