欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

, 为何查不到想要的结果

更新时间: 2014-05-18 09:05:35 责任编辑: Author_N8

 

高手请进, 为何查不到想要的结果
想查 特定日期之间的数据, 不知这个函数有什么问题, 一直看不出来 。

IF EXISTS(
       SELECT *
       FROM   dbo.sysobjects
       WHERE  id = OBJECT_ID(N'[dbo].fn_ltDate')
              AND (TYPE = 'FN' OR TYPE = 'TF' OR TYPE = 'IF')
   )
BEGIN
    PRINT '已存在,删除再新建'
    DROP FUNCTION fn_ltDate
END
ELSE
BEGIN
    PRINT '不存在,新建'
END
GO

--新建函数
CREATE FUNCTION dbo.fn_ltDate
(
@startDate  VARCHAR(10),
@endDate    VARCHAR(10)
)
RETURNS BIT
AS
BEGIN
DECLARE @result BIT
SET @result = 0
IF (
       LTRIM(RTRIM(ISNULL(@startDate, ''))) = ''
       OR LTRIM(RTRIM(ISNULL(@endDate, ''))) = ''
       OR DATEDIFF(DAY, @startDate, @endDate) >= 0
   )
BEGIN
    SET @result = 1
END

RETURN @result
END
GO


DECLARE @TempTalbe TABLE (Id INT, CreateTime DATETIME)

INSERT INTO @TempTalbe
SELECT 1,
       '2012-1-2' UNION
SELECT 2,
       '2012-3-2' UNION
SELECT 3,
       '2012-4-2' UNION
SELECT 4,
       '2012-5-2' UNION
SELECT 5,
       '2012-6-2'

DECLARE @StartDate1 DATETIME 
DECLARE @EndDate1 DATETIME 
SET @StartDate1 = '2012-3-2'
SET @EndDate1 =''--为NULL就可以, 为''就不行

SELECT *
FROM   @TempTalbe t
WHERE  dbo.fn_ltDate(@StartDate1, CreateTime)=1
       AND 
       dbo.fn_ltDate(CreateTime, @EndDate1) = 1



------最佳解决方案--------------------
'' 轉換為datetime是 1900-01-01 00:00:00.000 

改成這樣
LTRIM(RTRIM(ISNULL(@startDate, '1900-01-01 00:00:00.000'))) = '1900-01-01 00:00:00.000'
           OR LTRIM(RTRIM(ISNULL(@endDate, '1900-01-01 00:00:00.000'))) = '1900-01-01 00:00:00.000'
           OR DATEDIFF(DAY, @startDate, @endDate) >= 0

------其他解决方案--------------------
SELECT CAST('' AS DATETIME)
/*
1900-01-01 00:00:00.000

(1 行受影响)


*/

------其他解决方案--------------------
這樣也行

LTRIM(RTRIM(ISNULL(@startDate, ''))) = '1900-1-1'
           OR LTRIM(RTRIM(ISNULL(@endDate, ''))) = '1900-1-1'
           OR DATEDIFF(DAY, @startDate, @endDate) >= 0
上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-05-18 09:05:35
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/893575/
本文WWW.DOC100.NET DOC100.NET版权所有。