判断某天是当月的第几周的sql函数

2025-04-19 23:50:47
推荐回答(2个)
回答1:

创建函数

CREATE   FUNCTION   WeekOfMonth(@day datetime)  
RETURNS int
AS
begin
----declare @day datetime
declare @num int
declare @Start datetime
declare @dd int
declare @dayofweek char(8)
declare @dayofweek_num char(8)
declare @startWeekDays int
---set @day='2009-07-05'
if datepart(dd,@day)=1
return 1
else
set @Start= (SELECT   DATEADD(mm,   DATEDIFF(mm,0,@day),   0)) --一个月第一天的
set @dayofweek= (datename(weekday,@Start)) ---得到本月第一天是周几
set @dayofweek_num=(select (case @dayofweek when '星期一' then 2
when '星期二' then 3
when '星期三' then 4
when '星期四' then 5
when '星期五' then 6
when '星期六' then 7
when '星期日' then 1
end))
set @dayofweek_num= 7-@dayofweek_num+1 ---得到本月的第一周一共有几天
---print @dayofweek_num
   set @dd=datepart(dd,@day) ----得到今天是这个月的第几天
--print @dd
if @dd<=@dayofweek_num --小于前一周的天数
return 1
else
set @dd=@dd-@dayofweek_num
if @dd % 7=0
     begin
       set @num=@dd / 7
        return @num+1
      
     end
   else --if @dd % 7<>0
  
     set @num=@dd / 7
set @num=@num+1+1
       return @num
end

 

测试

select dbo.WeekOfMonth('2013-11-14')

 

结果

回答2:

:不是当年的第几周,这个函数相信我们都知道,数据库已经自带的! (经过实测,考勤,工资计算中利用,非常实用,我在网络中苦苦的寻找这个源代码,找到关于vb的代码,但是我想在数据库中就实现,这样做的好处能提高数据读取速度,对统计分析带来很大的好处,实在没法,老板又催的急,自己便把那段vb代码转化为SQL语句,如有问题敬请提出,万一我把公司考勤,工资计算搞出问题来就完了,其实这段代码拼出函数,在数据库中非常简单实用!) CREATE FUNCTION WeekOfMonth(@day datetime) RETURNS intASbegin----declare @day datetime declare @num int declare @Start datetime declare @dd int declare @dayofweek char(8) declare @dayofweek_num char(8) declare @startWeekDays int if datepart(dd,@day)=1return 1elseset @Start= (SELECT DATEADD(mm, DATEDIFF(mm,0,@day), 0)) --一个月第一天的 set @dayofweek= (datename(weekday,@Start)) ---得到本月第一天是周几 set @dayofweek_num=(select (case @dayofweek when '星期一' then 2 when '星期二' then 3 when '星期三' then 4 when '星期四' then 5 when '星期五' then 6 when '星期六' then 7 when '星期日' then 1end))set @dayofweek_num= 7-@dayofweek_num+1 ---得到本月的第一周一共有几天 ---print @dayofweek_num set @dd=datepart(dd,@day) ----得到今天是这个月的第几天 --print @ddif @dd<=@dayofweek_num --小于前一周的天数return 1elseset @dd=@dd-@dayofweek_num if @dd % 7=0beginset @num=@dd / 7 return @num+1endelse --if @dd % 7<0set @num=@dd / 7