2013-10-07 133 views
2
SQL> select * from porder ; 

    OID  BILL ODATE 
    ------ ---------- --------- 
    10  200 06-OCT-13 
    4  39878 05-OCT-13 
    5  430000 05-OCT-13 
    11  427 06-OCT-13 
    12  700 06-OCT-13 
    14  11000 06-OCT-13 
    15  35608 06-OCT-13 
    13  14985 06-OCT-13 
    8  33000 06-OCT-13 
    9  600 06-OCT-13 
    16  200 06-OCT-13 

    OID  BILL ODATE 
------ ---------- --------- 
    1  200 04-OCT-13 
    2  35490 04-OCT-13 
    3  1060 04-OCT-13 
    6  595 05-OCT-13 
    7  799 05-OCT-13 

16 rows selected. 

SQL> select * from porder where odate='04-Oct-2013'; 

no rows selected 

请别人帮忙...为什么不是查询工作.. ??Oracle SQL比较日期

+0

没有行选择 SQL> SELECT * FROM porder其中大馆= '04 - 辛13' ; 未选择行 SQL> select * from porder where odate = '04 -OCT-13'; 没有行选择这个查询也没有工作... odate是类型日期和IAM插入值的“sysdate”....现在我想按日期显示记录...如何显示它们... ?? –

回答

21

在Oracle中,一个DATE总是有一个时间组件。您的客户可能会或可能不会显示时间组件,但当您尝试进行平等比较时,它仍然存在。您还总是希望将日期与日期进行比较,而不是使用当前会话的NLS_DATE_FORMAT进行隐式转换的字符串,从而使它们非常脆弱。这将涉及要么ANSI日期文字或明确to_date电话

可以使用TRUNC功能的DATE截断至午夜

SELECT * 
    FROM porder 
WHERE trunc(odate) = date '2013-10-04' 

或者你也可以做一个范围比较(这将是,如果你能更有效从上odate索引益处)

SELECT * 
    FROM porder 
WHERE odate >= to_date('04-Oct-2013', 'DD-Mon-YYYY') 
    AND odate < to_date('05-Oct-2013', 'DD-Mon-YYYY');