【问题标题】:Decision based on what day of the week a date falls on基于日期所在星期几的决定
【发布时间】:2017-09-05 13:10:40
【问题描述】:

对于任何给定的日期,我需要确定它是一周中的哪一天。

我已经知道如何用这个 DATENAME(dw,MyDate.Field) 和这个 DATEPART(dw,MyDate.Field) 得到星期几。

一旦我得到星期几,如果它在星期三之前,我想返回那个星期三的日期。

如果星期几是星期三或之后,那么我想返回下星期三的日期。

星期一是我系统中的第一天。

【问题讨论】:

标签: sql-server


【解决方案1】:

使用DATEPART() 确定星期几。

针对不同情况使用CASE()

计算日期增量。提示:要么是3-dw,要么是7+3-dw

使用DATEADD() 从当天(由DATEPART 返回)到下周的星期三或星期三。

【讨论】:

  • 这更像是一个评论而不是一个答案。提供一个工作示例将使这成为一个答案。
  • 不,我不会为他做 100% 的工作。如果他不能从这里弄清楚,他应该学习非常基本的代数和SQL。网站文档指出:“任何让提问者朝着正确方向前进的答案都是有帮助的”
  • 从来没有建议你为他们做任何事情。但就目前而言,这不是一个答案,而是一个准确推动正确方向的评论。
  • 我认为他缺少的只是CASE
  • 感谢@neuhaus 的评论我现在知道了!
【解决方案2】:

最简单的方法,无需任何计算:

set datefirst 1;
with dates as (
 select CAST('20170906' as datetime) d
 union all
 select DATEADD(day, 1, dates.d) 
 from dates
 where DATEADD(day, 1, dates.d) <= '20170930'
)
select dates.d, DATEADD(day, v.valueToAdd, dates.d) nextWed
from dates
    join (values(1,2),(2,1),(3,7),(4,6),(5,5),(6,4),(7,3))v(dayOfWeek,valueToAdd) on v.dayOfWeek = DATEPART(weekday, dates.d)
order by 1

【讨论】:

    猜你喜欢
    • 2020-05-15
    • 1970-01-01
    • 2021-06-29
    • 1970-01-01
    • 2021-04-06
    • 2017-03-23
    • 1970-01-01
    • 2017-11-07
    • 2021-11-29
    相关资源
    最近更新 更多