只针对年月日的比较:
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