sqlserver:某年份某月份 是否在某时间段内的函数

 

如题:今日碰到这个问题,比较郁闷,干脆自己写了个函数

 

 

ExpandedBlockStart.gif 代码
--  
--
 IF OBJECT_ID (N'f_dtbj') IS NOT NULL
--
 DROP FUNCTION f_dtbj
--
 GO

create   function  f_dtbj( @year   int , @month   int , @dt1   datetime , @dt2   datetime )
returns    int  
as  
begin

   
declare   @dt   DateTime
   
declare   @dtDay   int
   
set   @dt = convert ( datetime , convert ( varchar , @year ) + ' - ' + convert ( varchar , @month ) + ' -1 ' )

   
select   @dtDay = day ( dateadd (dd, - 1 , cast ( convert ( varchar ( 6 ), dateadd (mm, 1 , @dt ), 112 ) + ' 01 '   as   datetime ))) 
    

   
declare   @inx   int
   
declare   @k   int
   
declare   @x1   int
   
declare   @x2   int
   
set   @k = 1

   
while ( @k <= @dtDay )
      
begin
      
set   @dt = convert ( datetime , convert ( varchar , @year ) + ' - ' + convert ( varchar , @month ) + ' - ' + convert ( varchar , @k ))
      
select   @x1 = datediff ( month , @dt1 , @dt )
      
select   @x2 = datediff ( month , @dt , @dt2 )
      
if   @x1 >= 0   and   @x2 >= 0   -- 在时间段里
           begin
          
set   @k = @dtDay + 1   -- 跳出
           set   @inx =   1
          
end
      
else
          
begin
          
set   @k = @k + 1
          
set   @inx = 0
          
end
      
end

   
return   @inx
end

 

 

转载于:https://www.cnblogs.com/kingeric/archive/2010/10/02/1841151.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值