create function udf_WeekOfMonth(@Date datetime)
-- 返回 @Date 是所在月的第几周 周日是当周的最后一天
returns integer
as
begin
return datediff(week
,case when (@@Datefirst + datepart(weekday,dateadd(month,datediff(month,0,@Date),0))) % 7 = 1
then dateadd(month,datediff(month,0,@Date),0) - 1
else
dateadd(month,datediff(month,0,@Date),0)
end
,case when (@@Datefirst + datepart(weekday,@Date)) % 7 = 1
then @Date-1
else @Date
end
) + 1
endgoselect dbo.udf_WeekOfMonth('2005-12-02')
select dbo.udf_WeekOfMonth(getdate())
-- 返回 @Date 是所在月的第几周 周日是当周的最后一天
returns integer
as
begin
return datediff(week
,case when (@@Datefirst + datepart(weekday,dateadd(month,datediff(month,0,@Date),0))) % 7 = 1
then dateadd(month,datediff(month,0,@Date),0) - 1
else
dateadd(month,datediff(month,0,@Date),0)
end
,case when (@@Datefirst + datepart(weekday,@Date)) % 7 = 1
then @Date-1
else @Date
end
) + 1
endgoselect dbo.udf_WeekOfMonth('2005-12-02')
select dbo.udf_WeekOfMonth(getdate())
)
Select 本年第几周=datename(week,'2006-07-01'),本日星期几=datename(weekday,'2006-07-01')
虽然SQL没有计算本月第几周的函数,但是利用DateName这个函数还是可以计算出来的
比如我们计算2006-07-25是本月的第几周
select cast(datename(week,'2006-07-25') as int)-cast(datename(week,'2006-07-01') as int)因为此函数类型不是数值型,所以需要转换类型