PL/SQL中的日期范围

PL/SQL中的日期范围,sql,plsql,Sql,Plsql,如果我的表中有一个日期列(日期字段),名为created\u Date,值为“9/2/2010 5:25:42 PM” 我想选择从开始日期到结束日期的所有行。但是,结束日期可能是null。在这种情况下,我想选择所有created\u date大于end\u date的行,为什么只使用一个简单的SQL查询,如下所示: select xxx from table_names where created_date is null or (created_date >= to_date("02/0

如果我的表中有一个日期列(日期字段),名为
created\u Date
,值为“9/2/2010 5:25:42 PM”


我想选择从
开始日期
结束日期
的所有行。但是,
结束日期
可能是
null
。在这种情况下,我想选择所有
created\u date
大于
end\u date

的行,为什么只使用一个简单的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"));

请注意,如果
created\u date
不是可为空的列,您可以删除
created\u date is null
条件…

如果我从您的问题中正确理解的话 这应该起作用:

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);
选择*
从你的桌子上
其中创建日期>=截止日期('2010年9月1日','dd.mm.yyyy')
和(结束日期选择*
从表
如果created_date>='2010-09-02'
和(created_date为NULL或created_date,因为toDate(可以为NULL)是一个主机变量,它比已经给出的解决方案更容易(顺便说一句,在这方面都是错误的)

从表格中选择*
其中创建日期>=@StartDate和创建日期
选择*
从桌子上
其中创建日期>=&开始日期和

(创建日期,但我已经提到,在本例中,到目前为止2010年9月3日可能为空。在本例中,我必须从Dateah获取所有数据>=比我快几秒:)@Suvonkar好的,我没有正确地了解您的条件。我编辑了您的问题和我的答案。我不太喜欢这种方式,因为它会导致完整的表扫描,即使在created_date.BTW上有索引,假设created_date是一个日期列,您的解决方案只有在yyyy-mm-dd是默认日期格式时才有效。最后一条注释是不正确,解决方案将使用完整的日期时间格式“yyyy-MM-dd hh:MM:ss”或“MM/dd/yyyy hh:MM:ss”。比较是隐式的。是的,我测试了它。我想您的意思是“…创建日期大于开始日期的位置”。如果结束日期为空,则无法有意义地比较创建日期和结束日期。
NVL
,而不是
ISNULL
-这是Oracle。
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;
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);
select * from mytable
  where created_date between v_fromdate
                         and nvl(v_todate, to_date('31.12.9999','dd.mm.yyyy'));
select * from yourtable
where created_date >= @StartDate AND created_date <=ISNULL(@EndDate,created_date)
SELECT *
  FROM A_TABLE
  WHERE CREATED_DATE >= &START_DATE AND
        (CREATED_DATE <= &END_DATE OR
         &END_DATE IS NULL)