小编典典

Oracle SQL比较日期

sql

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

请有人帮忙…为什么查询不起作用.. ??


阅读 186

收藏
2021-03-23

共1个答案

小编典典

在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' );
2021-03-23