我需要通过过滤dat列来获取记录,该列从“今年2月的第一个星期六”到“明年2月1日”
我的查询将是这样的:
从*员工的“ *年2月的第一个星期六”到“明年2月1日”之间进行选择
答案 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))