0

我目前在我的WHERE条款中有这样的声明:

AND ((@includeExpired = 0 AND lic.[DateExpiresUtc] > GETDATE()) 
     OR 
     (@includeExpired = 1 AND lic.[DateExpiresUtc] <> GETDATE())
    )

看起来很难看,我尝试只包含一个更简单的语句版本,例如:

(@includeExpired = 0 AND lic.[DateExpiresUtc] > GETDATE())

但是什么时候@includeExpired一切1都无法选择任何东西。

有没有更好的方法来做到这一点?

4

2 回答 2

2

根据您的变量名称@includeExpired,这意味着该变量决定在结果集中另外包括过期记录,第二部分中的检查lic.[DateExpiresUtc] <> GETDATE(), 是不必要的,并且第一部分中的其他检查是不必要的。

尝试这个:

AND (lic.[DateExpiresUtc] > GETDATE()) OR (@includeExpired = 1)
于 2013-11-07T15:36:51.940 回答
0

只有一个想法。

(CASE
  WHEN @includeExpired = 1 THEN 1
  WHEN @includeExpired = 0 AND lic.[DateExpiresUtc] > GETUTCDATE() THEN 1
  ELSE 0 END) = 1
于 2013-11-07T15:33:55.073 回答