将日期与sql server中的null和datetime值进行比较

rah*_*ukh 6 sql-server-2008

我正在编写程序,我希望使用从日期到日期的小日期时间来过滤日期.从日期开始可以为null某些时间,并且To Date也可以在某个时间为null,同时比较那么当from日期或日期可以为null时我如何过滤日期.

我试过以下查询,但它给了我错误.

 SELECT RQ.int_REPS_QUES_DIFF_LEVEL,SUM(1) AS NoOFDificultyQuestion FROM   
 REPS_TEST_QUES_ASSIGNED RQA   
 INNER JOIN REPS_QUESTION RQ ON RQA.int_REPS_TEST_QUES_ASSG_QUESID=RQ.PK_REPS_QUES_ID  
 WHERE int_REPS_TEST_ID IN(  
 SELECT FK_TEST_ID FROM STUDENT_EXAM SE WHERE FK_USER_ID=56 AND SE.FK_REPS_BATCH_ID=466 
    and CASE 
WHEN @FromDate!=NULL AND @ToDate!=NULL     
     THEN dat_STUD_EXAM_FINALEND >= @FromDate AND dat_STUD_EXAM_FINALEND <= @ToDate 
WHEN @FromDate!=NULL AND @ToDate=NULL  
     THEN  dat_STUD_EXAM_FINALEND >= @FromDate  
WHEN @FromDate=NULL AND @ToDate!=NULL  
     THEN  dat_STUD_EXAM_FINALEND <= @ToDate
END
 )   
 strong textGROUP BY RQ.int_REPS_QUES_DIFF_LEVEL  
Run Code Online (Sandbox Code Playgroud)

我在收到错误

THEN dat_STUD_EXAM_FINALEND >= @FromDate AND dat_STUD_EXAM_FINALEND <= @ToDate  
Run Code Online (Sandbox Code Playgroud)

这行我告诉我哪里出错了

Tim*_*ter 11

代替

WHEN @FromDate!=NULL AND @ToDate!=NULL
Run Code Online (Sandbox Code Playgroud)

使用

WHEN @FromDate IS NOT NULL AND @ToDate IS NOT NULL
Run Code Online (Sandbox Code Playgroud)

IS [NOT]为空

如果有什么东西在T-SQL中NULL未定义的,那么你无法与它进行比较.既=!=产量false如果两个中的一个(或两者)的值是NULL.

  • 请注意,您可以`SET ANSI_NULLS OFF`来改变`=`的行为,以便在将任何NULL值与NULL进行比较时返回true,并在比较时进行比较(`<`,`> =`等)为TRUE任何非NULL值为NULL.请参阅[MSDN](https://msdn.microsoft.com/en-us/library/ms188048.aspx).请注意,此设置将在未来版本中删除,绝对不建议使用它. (2认同)