SQL条件WHERE简化

时间:2013-11-07 15:30:16

标签: sql tsql sql-server-2012

我目前在我的WHERE子句中有这样的声明:

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

这看起来很难看,我尝试过包含一个更简单的声明版本,如:

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

但是当@includeExpired1时,它们都无法选择任何内容。

有更好的方法吗?

2 个答案:

答案 0 :(得分:2)

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

试试这个:

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

答案 1 :(得分:0)

只有一个想法。

(CASE
  WHEN @includeExpired = 1 THEN 1
  WHEN @includeExpired = 0 AND lic.[DateExpiresUtc] > GETUTCDATE() THEN 1
  ELSE 0 END) = 1