日期:2014-05-17  浏览次数:20529 次

SQL Server 返回两个时间的小时部分之差
 
  create function gethours(@stime datetime,@etime datetime)
  returns int
  as
  begin
  declare @hstime nvarchar(30)
  declare @hetime nvarchar(30)
  select @hstime=Ltrim(datepart(hh,@stime))
  select @hetime=Ltrim(datepart(hh,@etime))
  if @hstime<8 and @hetime<17 and @hetime>8
  return @hetime-8
  else if @hstime<8 and @hetime>17
  return 8
  else if @hstime<8 and @hetime<8
  return 0
  else if @hstime>17 and @hetime>17
  return 0
  else if @hstime>17 and @hetime<17 and @hetime>8
   return @hetime-8
  else if @hstime>17 and @hetime<8
  return 0
 else 
 return @hetime-@hstime
  end

提示信息:
消息 455,级别 16,状态 2,过程 gethours,第 22 行
The last statement included within a function must be a return statement.
不知道怎么解决啊
------解决方案--------------------
如果你是由什么特殊的需求,我把你的函数改了一下,应该不会报错了:

 create function gethours(@stime datetime,@etime datetime)
  returns int
  as
  
begin
  
  declare @hstime nvarchar(30)
  declare @hetime nvarchar(30)
  declare @result int
  
  select @hstime=Ltrim(datepart(hh,@stime))
  select @hetime=Ltrim(datepart(hh,@etime))
  
  if @hstime<8 and @hetime<17 and @hetime>8
  set @result=@hetime-8
  
  else if @hstime<8 and @hetime>17
  set @result=8
  
  else if @hstime<8 and @hetime<8
  set @result=0
  
  else if @hstime>17 and @hetime>17
  set @result=0
  
  else if @hstime>17 and @hetime<17 and @hetime>8
  set @result=@hetime-8
   
  else if @hstime>17 and @hetime<8
  set @result=0
  
 else 
    set @result=(cast(@hetime as int)- cast(@hstime as int))


return @result

end
go