时间大小的比较

 只针对年月日的比较:


GO
/****** Object:  UserDefinedFunction [dbo].[CompareToDate]    Script Date: 04/13/2011 09:32:35 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:  让
-- Create date: 2011-04-12
-- Description: 時間大小的比較
-- Debug:
--返回:          
-- =============================================
ALTER function [dbo].[CompareToDate]
(
      @beginDate varchar(50),--起始時間
      @endDate varchar(50),--結束時間
      @bothDate varchar(50)--用于判斷是否存在起始時間與結束時間的區間內
)
returns tinyint
as
begin
  declare @date1 datetime,@date2 datetime,@IsExec int,@helpDate varchar(50),@SuccessValue tinyint
  set @IsExec=0
  set @SuccessValue=0
  if (ISDATE(@beginDate)=0 or ISDATE(@endDate)=0) and @bothDate=''
     return 0--表示其中一個字符串不為日期格式
  set @beginDate=LTRIM(RTRIM(isnull(@beginDate,'')))
  set @endDate=LTRIM(RTRIM(isnull(@endDate,'')))
  set @bothDate=LTRIM(RTRIM(isnull(@bothDate,'')))
  if LEN(@beginDate)<>0 and LEN(@beginDate)<8
  begin
     if(8-LEN(@beginDate))%2=0
       set @beginDate=@beginDate+LEFT('0101',8-len(@beginDate))
  end
  if LEN(@endDate)<>0 and LEN(@endDate)<8
    begin
     if(8-LEN(@endDate))%2=0
       set @endDate=@endDate+LEFT('0101',8-len(@endDate))
    end
      if LEN(@bothDate)<>0 and LEN(@bothDate)<8
    begin
     if(8-LEN(@bothDate))%2=0
       set @bothDate=@bothDate+LEFT('0101',8-len(@bothDate))
    end
 if @beginDate<>'' or @endDate<>'' or @bothDate<>''
    begin
       if ISDATE(@beginDate)=0 or ISDATE(@endDate)=0 or ISDATE(@bothDate)=0
         return 0
    end
if @IsExec>0
  begin
  gotoSkip:
  if YEAR(@date1)>YEAR(@date2)
      set @SuccessValue=1--表示起始日期比結束日期大
  else if YEAR(@date1)<YEAR(@date2)
      set @SuccessValue=0--表示起始日期比結束日期小
  else
    begin
      if MONTH(@date1)>MONTH(@date2)
         set @SuccessValue=1--表示起始日期比結束日期大
      else if MONTH(@date1)<MONTH(@date2)
         set @SuccessValue=0--表示起始日期比結束日期小
      else
        begin
           if DAY(@date1)>DAY(@date2)
             set @SuccessValue=1--表示起始日期比結束日期大
           else if DAY(@date1)<DAY(@date2)
             set @SuccessValue=0--表示起始日期比結束日期小
           else
             set @SuccessValue=2--表示兩個日期相等
        end
    end
    if @IsExec=1
       return @SuccessValue
    if @IsExec=2
       begin
          if @beginDate=''
              begin
                 if @SuccessValue=0 or @SuccessValue=2
                   set  @SuccessValue=1
                 else if @SuccessValue>0
                   set @SuccessValue=0
              end
             return @SuccessValue
       end
     if @IsExec=3
      begin
        if @SuccessValue=0 or @SuccessValue=2
         begin
           set @date1=CONVERT(datetime,@endDate)
           set @date2=CONVERT(datetime,@bothDate)
           set @IsExec=4
           goto gotoSkip
         end
         return 0
      end
      if @IsExec=4
         return @SuccessValue
  end
   if @bothDate=''
     begin
       if @beginDate='' or @endDate=''
          return 0
       else
        begin
           set @date1=CONVERT(datetime,@beginDate)
           set @date2=CONVERT(datetime,@endDate)
        end
        set @IsExec=1
        goto gotoSkip
     end
   else
      begin
        if ISDATE(@bothDate)=0
          return 0
        if @beginDate='' or @endDate=''
        begin
             set @helpDate=(case when @beginDate='' then @endDate else @beginDate end)
             set @date1=CONVERT(datetime,@helpDate)
             set @date2=CONVERT(datetime,@bothDate)
             set @IsExec=2
             goto gotoSkip
       end
       else
          begin
              set @date1=CONVERT(datetime,@beginDate)
              set @date2=CONVERT(datetime,@bothDate)
              set @IsExec=3
              goto gotoSkip
          end
      end
   return @SuccessValue
end

猜你喜欢

转载自blog.csdn.net/wlzwcr/article/details/6521788