2013-10-07 135 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');