我目前在我的WHERE
子句中有这样的声明:
AND ((@includeExpired = 0 AND lic.[DateExpiresUtc] > GETDATE())
OR
(@includeExpired = 1 AND lic.[DateExpiresUtc] <> GETDATE())
)
这看起来很难看,我尝试过包含一个更简单的声明版本,如:
(@includeExpired = 0 AND lic.[DateExpiresUtc] > GETDATE())
但是当@includeExpired
为1
时,它们都无法选择任何内容。
有更好的方法吗?
答案 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