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)