我如何获得今年的第二个星期六?

时间:2018-06-27 19:16:25

标签: sql-server date

我需要通过过滤dat列来获取记录,该列从“今年2月的第一个星期六”到“明年2月1日”

我的查询将是这样的:

从*员工的“ *年2月的第一个星期六”到“明年2月1日”之间进行选择

2 个答案:

答案 0 :(得分:2)

如果没有Calendar或Tally表,则可能是这样的。

示例

Declare @Date1 date = '2018-02-01'
Declare @Date2 date = '2019-02-01'

Select E.*
 From  Employee E
 Join (
        Select DateR1=min(case when DateName(WEEKDAY,D)='Saturday' then D end)
              ,DateR2=max(D)
         From (Select Top (DateDiff(DAY,@Date1,@Date2)+1) D=DateAdd(DAY,-1+Row_Number() Over (Order By (Select Null)),@Date1) 
                From  master..spt_values n1,master..spt_values n2
              ) A
       ) D on E.HierDate between D.DateR1 and D.DateR2

答案 1 :(得分:0)

这是一种方法,假设datefirst为7,并且您有datefromparts()可用:

set datefirst 7
declare @dt1 date = datefromparts(year(current_timestamp), 2, 1);
set @dt1 = dateadd(day, 7 - datepart(weekday, @dt1), @dt1);

declare @dt2 date = datefromparts(year(current_timestamp) + 1, 2, 1);
set @dt2 = dateadd(day, 7 - datepart(weekday, @dt2), @dt2);

如果您需要内联计算,则只需替换即可扩展

between
dateadd(day, 7 - datepart(weekday, datefromparts(year(current_timestamp), 2, 1)), datefromparts(year(current_timestamp), 2, 1))
and
dateadd(day, 7 - datepart(weekday, datefromparts(year(current_timestamp) + 1, 2, 1)), datefromparts(year(current_timestamp) + 1, 2, 1))