Sql server SQL Server:条件WHERE子句

Sql server SQL Server:条件WHERE子句,sql-server,tsql,where-clause,conditional-operator,Sql Server,Tsql,Where Clause,Conditional Operator,这是我的第一个问题,希望一切顺利 我所做的是一个使用MSSMS的用户定义(表值)函数,其中有一点,我必须根据函数参数@Year查找记录 我的问题是,当记录超过两年时,它应该列出所有超过两年的记录。我一直用这个把头撞在墙上,这就是我到目前为止取得的成绩: WHERE ( @Year = YEAR(GETDATE()) AND YEAR(E.ExampleColumnDate) = @Year OR @Year = YEAR(GETDATE())-

这是我的第一个问题,希望一切顺利

我所做的是一个使用MSSMS的用户定义(表值)函数,其中有一点,我必须根据函数参数@Year查找记录

我的问题是,当记录超过两年时,它应该列出所有超过两年的记录。我一直用这个把头撞在墙上,这就是我到目前为止取得的成绩:

WHERE   (
        @Year = YEAR(GETDATE()) AND YEAR(E.ExampleColumnDate) = @Year
        OR
        @Year = YEAR(GETDATE())-1 AND YEAR(E.ExampleColumnDate) = @Year
        OR
        @Year = YEAR(GETDATE())-2 AND YEAR(E.ExampleColumnDate) = @Year
        OR
        @Year <= YEAR(GETDATE())-3 AND YEAR(E.ExampleColumnDate) < @Year
        )
在哪里(
@年=年(GETDATE())和年(例如ColumnDate)=@Year
或
@年=年(GETDATE())-1和年(例如ColumnDate)=@Year
或
@年=年(GETDATE())-2和年(例如ColumnDate)=@Year
或
@年份<代码>何处(
(@Year=Year(GETDATE())和Year(例如ColumnDate)=@Year)
或
(@Year=Year(GETDATE())-1和Year(例如ColumnDate)=@Year)
或
(@Year=Year(GETDATE())-2和Year(例如ColumnDate)=@Year)
或

(@Year你也可以用这个获得超过两年的记录

;with cte 
as
(
SELECT top 10 DATEDIFF(year,E.ExampleColumnDate, getdate()) as diff, * 
  FROM [yourtablename]
  )
  select * from cte where diff =2

那么,问题是什么?你得到的结果不正确吗?错误消息?感觉应该看起来“更干净”?哦,是的。如果年份超过两年,此代码将不会返回任何内容。嗯,您的
不匹配。哦,我实际上发现我正在处理的不是我的代码,但实际数据是错误的。但是感谢您的快速回复Damien。在我可以的时候结束此问题。这是什么样的答案?您刚刚重复了where子句。没有改进,也没有任何评论。不,那是一个不同的子句。看括号。@johnsa如果你是对的,我没有看到。仍然有一个问题-这些括号在逻辑或结果上绝对没有区别。我只是接受了结束这个问题的答案,因为结果很好。
;with cte 
as
(
SELECT top 10 DATEDIFF(year,E.ExampleColumnDate, getdate()) as diff, * 
  FROM [yourtablename]
  )
  select * from cte where diff =2