WHERE子句返回不正确的记录

use*_*840 5 sql t-sql sql-server datetime sql-server-2005

我正在使用它

DECLARE @Year_Filter_Start AS DATETIME
SET @Year_Filter_Start = DATEADD( dd, -1, DATEADD( yy, DATEDIFF( yy, 0, GetDate() ), 0 ) )
DECLARE @Year_Filter_End AS DATETIME
SET @Year_Filter_End = GetDate()

INSERT INTO TABLE
  ( blah )
SELECT blah
  FROM OTHER_TABLE
 WHERE ACTISSUEDATE IS NULL 
    OR ACTSTARTDATE BETWEEN @Year_Filter_Start AND @Year_Filter_End
Run Code Online (Sandbox Code Playgroud)

并且它返回ACTISSUEDATE不为空且ACTSTARTDATE不在年份开始和今天之间的记录.@Year_Filter_Start应该是今年的开始,@ Year_Filter_End应该是今天.

例如:

ACTSTARTDATE是2010-08-02和ACTISSUEDATE的记录是2011-03-15

或者ACTSTARTDATE是2009-05-18,ACTISSUEDATE是2009-09-06

这个陈述有什么问题吗?

Cee*_*Vei 0

首先,您希望两个条件都为真还是其中一个为真。 其次,它为您提供 ACTISSUEDATE 不为空的记录,因为这些记录在年初和今天之间具有 ACTSTARTDATE。那些 ACTSTARTDATE 不在年初和今天之间的记录的 ACTISSUEDATE 为 NULL。

改变你要去的地方 AND 而不是 OR