如果我有一个名为created_date
的日期列(日期字段)的表,其值为“9/2/2010 5:25:42 PM”。
我想选择从start_date
到end_date
的所有行。但是,end_date
可能是null
。在这种情况下,我想选择created_date
大于end_date
的所有行。
答案 0 :(得分:9)
由于toDate(可以为null)是一个宿主变量,它比已经给出的解决方案更容易(在这方面都是错误的,顺便说一下)
select * from mytable
where created_date between v_fromdate
and nvl(v_todate, to_date('31.12.9999','dd.mm.yyyy'));
答案 1 :(得分:0)
为什么只使用一个简单的SQL查询,如下所示:
select xxx from table_names where created_date is null or (created_date >= to_date("02/09/2010", "dd/mm/yyyy") and created_date <= to_date("03/09/2010", "dd/mm/yyyy"));
修改强>
您可以定义一个类似 ammoQ 定义的查询,例如:
select xxx from table_names where created_date is null or created_date >= start_date and created_date <= nvl(end_date, to_date("31/12/9999", "dd/mm/yyyy"));
但是,当您使用PL / SQL时,可以检查end_date
参数的可为空性:
IF end_date IS NULL THEN
select xxx from table_names where created_date is null or created_date >= start_date;
ELSIF
select xxx from table_names where created_date is null or created_date >= start_date and created_date <= end_date;
END IF;
请注意,如果created_date is null
不是可以为空的列,则可以删除created_date
条件...
答案 2 :(得分:0)
如果我从你的问题中解决了问题 这应该有效:
SELECT *
FROM yourTable
WHERE created_date >= to_date('01.09.2010', 'dd.mm.yyyy')
AND (end_date <= to_date('02.09.2010', 'dd.mm.yyyy')
OR end_date IS NULL);
答案 3 :(得分:0)
选择*
来自表
其中created_date&gt; ='2010-09-02'
和(created_date为NULL或created_date&lt; ='2010-09-03')
答案 4 :(得分:0)
select * from yourtable
where created_date >= @StartDate AND created_date <=ISNULL(@EndDate,created_date)
答案 5 :(得分:0)
SELECT *
FROM A_TABLE
WHERE CREATED_DATE >= &START_DATE AND
(CREATED_DATE <= &END_DATE OR
&END_DATE IS NULL)