查询日期范围增强函数 fn_ltDate3

来源:互联网 发布:非诚勿扰软件 编辑:程序博客网 时间:2024/06/08 08:04
IF EXISTS(         SELECT *         FROM   dbo.sysobjects         WHERE  id = OBJECT_ID(N'[dbo].fn_ltDate3')                AND (TYPE = 'FN' OR TYPE = 'TF' OR TYPE = 'IF')     )  BEGIN      PRINT '已存在,删除再新建'      DROP FUNCTION fn_ltDate3  END  ELSE  BEGIN      PRINT '不存在,新建'  END  GO  --Create   by: yenange, on 2013-01-18 --Description: 前日期是否<=后面的日期(在同一天也算是小于等于), 专用于查询列表时判断日期(FormDate,ToDate)是否在范围之中 --             不需要再判断是否为null或者为空串, 也不需要加给日期加" 23:59:59" 等 --Parameters : @startDate 前日期,@endDate 后日期,@queryParaPosition 查询参数的位置 --             两参数传入时的类型可为 varchar 或者 datetime 型 --             若有一参数为null或者'', 则返回1 (也算是小于等于) --Demo       :  --WHERE  dbo.fn_ltDate(@StartDate1, CreateTime, 0) = 1 --                    AND dbo.fn_ltDate(CreateTime, @EndDate1, 1) = 1 --注:         1. 页面中的参数,如果没有值时,请直接传空串或者NULL。 不要传Form最小值/To最大值过来,如 ( from: 2001-01-01; to: 2020-01-01/9999-12-31 ) --             2. 还有一个函数fn_ltDate, 那个函数只适用于表中的日期字段不可能为null的情况,不建议再使用。 --                以后无论哪种情况,请以此函数fn_ltDate3为准。 --Return     : 是 1 否 0  Create FUNCTION [dbo].[fn_ltDate3](@startDate          VARCHAR(32),@endDate            VARCHAR(32),@queryParaPosition  INT)RETURNS BITASBEGINDECLARE @result BIT --此处是为适应某些表中的日期型字段有NULL值. modify by ngye, on 2013-01-10IF (       (           @queryParaPosition = 0--查询参数在第0个位置, (列字段在第1个位置,对应@endDate)           AND LTRIM(RTRIM(ISNULL(@startDate, ''))) != ''--查询参数不为空           AND DATEDIFF(DAY, @startDate, '1900-01-01') != 0--查询参数不是最早的日期           AND @endDate IS NULL--列字段为 NULL       )       OR        (           @queryParaPosition = 1--查询参数在第1个位置, (列字段在第0个位置,对应@startDate)           AND LTRIM(RTRIM(ISNULL(@endDate, ''))) != ''--查询参数不为空           AND DATEDIFF(DAY, @endDate, '1900-01-01') != 0--查询参数不是最早的日期           AND @startDate IS NULL--列字段为 NULL       )   )BEGIN    RETURN 0ENDSET @result = 0  IF (       LTRIM(RTRIM(ISNULL(@startDate, ''))) = ''       OR LTRIM(RTRIM(ISNULL(@endDate, ''))) = ''       OR DATEDIFF(DAY, @startDate, '1900-01-01 00:00:00.000') = 0       OR DATEDIFF(DAY, @endDate, '1900-01-01 00:00:00.000') = 0       OR DATEDIFF(DAY, @startDate, @endDate) >= 0   )BEGIN    SET @result = 1END RETURN @resultEND