如何在BETWEEN子句中包含空值?

Sub*_*cob 3 sql sql-server sql-server-2008

在我的查询where条款中我有条件:

User.DateOfBirth BETWEEN @startDate AND @endDate 
Run Code Online (Sandbox Code Playgroud)

在哪里@startDate@endDate可以为空.如果 @startDate为null,我希望所有值小于或等于@endDate; 如果@endDate为null,我希望所有值都大于或等于@startDate; 如果两者都为null我想要所有的值.

我失败的尝试 - 返回0结果

((( User.DateOfBirth > @startDate) OR (@startDate Is null)) AND  (( User.DateOfBirth < @endDate) OR (@endDate is null)) )
Run Code Online (Sandbox Code Playgroud)

(编者注:BETWEEN包括终点(小于/大于或等于),但空案例的描述没有.我认为这是一个疏忽.

meh*_*tfi 10

试试这个:

[User].DateOfBirth BETWEEN ISNULL(@startDate,[User].DateOfBirth) AND ISNULL(@endDate,[User].DateOfBirth)
Run Code Online (Sandbox Code Playgroud)