我根据日期范围生成结果的查询返回null。有什么想法吗?

时间:2014-02-24 20:17:54

标签: sql oracle

我正在运行以下查询:

select * 
  from myTable 
 where TO_CHAR(TO_DATE( transdate,'DD-MM-YY'),'MM/DD/YYYY')) Between
         TO_CHAR(TO_DATE('01-01-13','DD-MM-YY'),'MM/DD/YYYY')) AND 
         TO_CHAR(TO_DATE('10-07-13','DD-MM-YY'),'MM/DD/YYYY'))

没有从db获取任何记录。

任何想法我做错了什么?

transdate的格式为'dd-mm-yy'

我根据日期范围生成结果的查询返回null。有什么想法吗?

1 个答案:

答案 0 :(得分:4)

您可以使用正确的日期格式将日期比较为字符串来解决您的问题:

 select * 
 from myTable 
 where TO_CHAR(TO_DATE( transdate,'DD-MM-YY'), 'YYYY-MM-DD')) Between
         TO_CHAR(TO_DATE('01-01-13','DD-MM-YY'), 'YYYY-MM-DD')) AND 
         TO_CHAR(TO_DATE('10-07-13','DD-MM-YY'), 'YYYY-MM-DD'));

但你真的应该这样做:

select *
from myTable
where trunc(transdate) between to_date('2013-01-01', 'YYYY-MM-DD') and to_date('2013-07-10', 'YYYY-MM-DD');

或者,更好的是:

select *
from myTable
where transdate >= to_date('2013-01-01', 'YYYY-MM-DD') and
      transdate < to_date('2013-07-11', 'YYYY-MM-DD');