2009-10-19 43 views
0

我想提取从数据库数据,其中场“结束_日期”小于今天的日期和地方END_DATE不等于空;我会怎么做?我想第二部分了..我有第一部分的麻烦的Oracle SQL查询的问题

select * 
from table 
where to_char(end_date) IS NOT null 
+2

您不需要浪费时间将结束日期转换为字符串来测试它是否为空;只需使用“WHERE end_date IS NOT NULL”。 –

回答

7

试试这个

... 
    Where end_ date is not null and 
     And end_date < sysdate 

而且,实际上,我认为你可能甚至不需要第一部分,仿佛END_DATE为null ,它肯定不会是今天的日期之后,因此其本身试试这个:

Where end_date < sysdate 

编辑备注:

  1. 这会给你的每个记录是 具有先于当前 系统日期和时间END_DATE,今天早些时候 包括 那些END_DATE值。如果你想只有那些 end_Dates达和包括 昨天午夜,那么你需要 与 表达对于昨天午夜结束日期 时间值替换“SYSDATE” ..

    在哪里end_date之间< TRUNC(SYSDATE)

  2. SYSDATE是甲骨文特定语法返回当前系统日期和时间。 (在SQL Server中,例如,它的)称为GETDATE(的功能。在ANSI标准语法实现此功能,(在Oracle和SQL Server的工作,并应在任何ANSI标准的数据库工作)是。CURRENT_TIMESTAMP

+1

+1:你不需要“not null”部分(因为NULL日期不会“小于sysdate”) –

+0

很好的解释tnx一堆 –

0

要告诉你多一点关于如何使用Oracle中的日期检查了这一点:

选择当前日期,并删除它30分钟其中check_date被声明为时间戳

select current_timestamp + interval '-30' minute into check_date from dual; 

选择从表中的一切地方END_DATE不为空及以上现 - 30分钟

select * from table 
where to_char(end_date) is not null and end_date < check_date; 
0
select * from table where end_date < CURRENT_DATE and end_date IS NOT null 
0

SELECT * FROM表 其中TO_CHAR(END_DATE, 'DD-MM-YYYY')是not null and end_date < sysdate;