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
调用
您可以使用该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' );
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句