[英]Oracle SQL comparing dates
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
调用
您可以使用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' );
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.