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
进行隐式转换,从而使它们变得相当脆弱。这将涉及 ANSI 日期文字或显式to_date
calls
您可以使用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' );
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)