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中,一个DATE总有一个时间成分。您的客户端可能显示也可能不显示时间分量,但是当您尝试进行相等比较时,它仍然存在。您还总是希望将日期与日期而不是字符串进行比较,后者使用当前会话NLS_DATE_FORMAT进行隐式转换,从而使它们相当脆弱。THat将涉及ANSI日期文字或显式to_date调用
DATE
NLS_DATE_FORMAT
to_date
您可以使用该TRUNC函数将截断DATE到午夜
TRUNC
SELECT * FROM porder WHERE trunc(odate) = date '2013-10-04'
或者,您可以进行范围比较(如果您可以受益于的索引,这将更加有效odate)
odate
SELECT * FROM porder WHERE odate >= to_date( '04-Oct-2013', 'DD-Mon-YYYY' ) AND odate < to_date( '05-Oct-2013', 'DD-Mon-YYYY' );