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 BIT
AS
BEGIN
DECLARE @result BIT
--此处是为适应某些表中的日期型字段有NULL值. modify by ngye, on 2013-01-10
IF (
(
@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 0
END
SET @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 = 1
END
RETURN @result
END
09-25
09-25
09-25