当where条件中的变量为null时,我一直在寻找返回所有记录的方法。
我有一个案例,用户有一个可选参数来过滤几个变量(范围),我正在寻找最好的方法,而不影响性能,这是我有多远:
DECLARE @P1 date = '2017-04-16 00:00:00.000',
@P2 nvarchar = null,
@P3 nvarchar = null
Select RefDate,Account,ShortName from JDT1
where RefDate < @P1 AND
Account between isnull(@P2,(select min(account) from JDT1))
and isnull(@P3,(select max(account) from JDT1))
这不会返回表中的所有值+由于两个子查询,运行所需的时间比平常多。
提前致谢。
答案 0 :(得分:0)
OR
子句 IS NULL
现有条件应该可以解决问题:
Select RefDate,Account,ShortName from JDT1
where RefDate < @P1
AND (Account >= @P2 OR @P2 IS NULL)
AND (Account <= @P3 OR @P3 IS NULL)
答案 1 :(得分:0)
如果您希望它能够正常工作,那么您的代码就可以了。它看起来应该更像:
declare @P1 datetime = '2017-04-16 00:00:00.000',
@P2 nvarchar(255) = null,
@P3 nvarchar(255) = null;
Select RefDate, Account, ShortName
from JDT1
where RefDate < @P1 and
(account >= @P2 or @P2 is null) and
(account <= @P3 or @P3 is null);
注意:
date
没有时间组件。如果您不想要时间组件,请使用@P1 date = '2017-04-16'
。