Oracle SQL在where子句中包含空日期

Oracle SQL在where子句中包含空日期,sql,oracle,Sql,Oracle,我有以下数据: id | actual_start 1 | (null) 2 | 03/03/2014 3 | 27/03/2014 我希望能够使用use输入来选择所有日期,包括日期输入和日期输入之后的日期,但是空值给我带来了一个问题。我只希望在用户将输入留空时包含空值 这就是我所拥有的: where actual_start >= nvl(to_date('&start_date','dd/mm/yyyy'), to_date('01/01/2000', 'dd/mm/y

我有以下数据:

id | actual_start
 1 | (null)
 2 | 03/03/2014
 3 | 27/03/2014
我希望能够使用use输入来选择所有日期,包括日期输入和日期输入之后的日期,但是空值给我带来了一个问题。我只希望在用户将输入留空时包含空值

这就是我所拥有的:

where actual_start >= nvl(to_date('&start_date','dd/mm/yyyy'), to_date('01/01/2000', 'dd/mm/yyyy'))
当用户实际输入日期时,这是可以接受的。但是,如果用户将其留空,则我得到以下结果:

id | actual_start
 2 | 03/03/2014
 3 | 27/03/2014
这是不好的

我的另一个想法是尝试:

where (actual_start >= nvl(to_date('&start_date','dd/mm/yyyy'), to_date('01/01/2000', 'dd/mm/yyyy'))
or actual_start is null)
但这始终包括空值-即,它适用于用户不输入任何内容,但如果用户输入3月20日,它将返回:

id | actual_start
 1 | (null)
 3 | 27/03/2014
这不好

非常感谢您的帮助。

试试这个:

where nvl(actual_start, to_date('01/01/2000', 'dd/mm/yyyy')) >=
 nvl(to_date('&start_date','dd/mm/yyyy'), to_date('01/01/2000', 'dd/mm/yyyy'))
尽管不能使用
actual_date
列的索引会产生副作用,因此可能会导致大型数据集的性能问题

更新:您可以使用的另一个是您的第二个条件稍微修改:

where actual_start >= 
 nvl(to_date('&start_date','dd/mm/yyyy'), to_date('01/01/2000', 'dd/mm/yyyy'))
or nvl('&start_date',actual_start) is null

所以,如果用户没有键入任何内容,您是希望看到空记录还是所有记录?很抱歉,我没有得到您想要的结果。是否要空值?我知道您需要它们,但上次查询后的注释正好相反。抱歉,伙计们,我只希望在用户将输入留空时包含null。因此,如果用户输入“”,您只希望显示null记录。任何带有日期的内容都不会显示。正确吗?如果&start\u date为空,则希望为空,否则跳过它们?