繁体   English   中英

Oracle SQL比较日期

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM