【问题标题】:T-SQL DateMath: for any given date, find occurrence of the dayname in month, e.g. 3rd SaturdayT-SQL DateMath:对于任何给定的日期,查找月份中日期名称的出现,例如第三个星期六
【发布时间】:2012-11-22 17:10:37
【问题描述】:

我正在尝试开发一个调度应用程序,该应用程序需要表示诸如“此事件发生在每月的第 2 和第 4 个星期三”或“此事件发生在每月的奇数星期六(即第 1、第三和第五个星期六)。

为此,我需要在 T-SQL 中编写一个函数,该函数接受一个日期输入并返回一个整数,该整数表示日期名称的哪个月份出现在该日期。

例如,如果我发送函数 2012 DEC 21,它将返回 3,因为 2012 年 12 月 21 日是该月的第三个星期五。鉴于 2012 年 12 月 29 日,它将返回 5,因为 2012 年 12 月 29 日是该月的第 5 个星期六。

我想在不使用预先填充的日历表的情况下执行此操作。我可能想使用该函数来处理历史日期,例如计算 1958 年 7 月 16 日是该月的哪个星期三。

【问题讨论】:

  • 我想你可以在想要的日期和本月的第一天使用 datepart dw 做一些事情,但我不在一台装有 SQL Server 的计算机前尝试实现。不过,这是一个开始的地方。

标签: tsql dayofweek days date-math


【解决方案1】:

试试这个:

SELECT ((DATEPART(d, @input) - 1) / 7) + 1

我们不关心一周中的实际日期,只关心每月第一天过去的天数(即天值 - 1)。然后一个整数除以 7 得到当月第一天过去的 周数,最后 + 1 让它从 1 而不是 0 开始。

【讨论】:

    猜你喜欢
    • 2020-05-30
    • 1970-01-01
    • 1970-01-01
    • 2014-02-11
    • 1970-01-01
    • 1970-01-01
    • 2021-12-09
    • 2013-05-15
    • 1970-01-01
    相关资源
    最近更新 更多