你可以做到這一點
alter function IsDateFirstOfMonth(@date as datetime)
returns int
as
begin
declare @first datetime,
@last datetime,
@temp datetime,
@appearance int
declare @table table(Id int identity(1,1),
StartDate datetime,
EndDate datetime,
DayName nvarchar(20),
RowNumber int)
set @first=dateadd(day,1-day(@date),@date)
set @last=dateadd(month,1,@first)-1
set @[email protected]
while @temp<[email protected]
begin
insert into @table(StartDate,EndDate,DayName) values(@temp,@temp+6,datename(dw,@temp))
set @[email protected] +1
end
select @appearance=Nb
from(
select StartDate,EndDate,DayName,row_number() over (partition by DayName order by StartDate) as Nb
from @table) t
where @date between t.StartDate and t.EndDate and datename(dw,@date)=t.DayName
if @[email protected]<7
set @appearance=-1
return @appearance
end
select dbo.IsDateFirstOfMonth('31 Dec 2014')
select dbo.IsDateFirstOfMonth('03 Nov 2014') -- result 1 (first) monday
select dbo.IsDateFirstOfMonth('10 Nov 2014') -- result 2 (second)
select dbo.IsDateFirstOfMonth('17 Nov 2014') -- result 3 (third)
select dbo.IsDateFirstOfMonth('24 Nov 2014') -- result -1 (last) .... here it will be the last monday
select dbo.IsDateFirstOfMonth('02 Nov 2014') -- result 1 (first) sunday
希望這將幫助你
有什麼不對的檢查月份的一天少於8? – 2014-11-06 21:21:46
您是否試圖確定'@ date'是第一個星期一,還是在本月的第一個星期(即,是否在同一月的第一個日期的同一周)?這幾乎聽起來像你正在努力做到這一點。 – 2014-11-06 21:40:08
那麼我有一個完整的日期列表。讓我們說從今天到今年年底的所有星期一。我希望可以選擇在每個月內返回第一或第二或第三或第四個星期一或最後一個星期一。所以如果我使用> 8或> 15等邏輯。它不會總是工作的第四或最後 – user2329438 2014-11-06 21:42:07