不显示与Oracle SQL Developer中的条件匹配但没有错误的项目

时间:2015-04-02 09:42:15

标签: sql oracle oracle-sqldeveloper

我有下面的代码,我用它来显示来自'MP'

的wh_id的字段
select o.wh_id, o.bill_to_code, d.create_date,
   (case when d.pick_area like 'GPS%' then 'GPS' else d.pick_area
    end) as pick_area,
    count(*) as OUC
from t_order o INNER JOIN
 t_pick_detail d
 on o.order_number = d.order_number
where o.wh_id = 'MP'
group by o.wh_id, o.bill_to_code, d.create_date,
     (case when d.pick_area like 'GPS%' then 'GPS' else d.pick_area
    end)
order by o.bill_to_code

它给了我以下结果:

enter image description here

然后,我添加了一个与上表中的项目匹配的额外条件。

额外标准是:

AND d.create_date =  '19-FEB-15'

完整代码现在:

select o.wh_id, o.bill_to_code, d.create_date,
   (case when d.pick_area like 'GPS%' then 'GPS' else d.pick_area
    end) as pick_area,
    count(*) as OUC
from t_order o INNER JOIN
 t_pick_detail d
 on o.order_number = d.order_number
where o.wh_id = 'MP' AND d.create_date =  '19-FEB-15'
group by o.wh_id, o.bill_to_code, d.create_date,
     (case when d.pick_area like 'GPS%' then 'GPS' else d.pick_area
    end)
order by o.bill_to_code

现在我得到的所有结果都显示在下面,但是它看起来似乎没有结果,因为从上面的打印屏幕可以看到该信息。我没有收到任何错误。

enter image description here

希望有人能提供帮助,谢谢。

2 个答案:

答案 0 :(得分:1)

从性能的角度来看,我不建议使用 TRUNC ,因为会在DATE列上使用任何常规索引

最好使用 RANGE 条件。它将使用日期列上的索引,您将看到索引范围扫描,而不是 FULL TABLE扫描

例如,

d.create_date >= to_date('19-FEB-15', 'DD-MON-YY')
AND
d.create_date < to_date('19-FEB-15 ', 'DD-MON-YY') + 1

或者,

d.create_date 
BETWEEN to_date('19-FEB-15', 'DD-MON-YY') 
AND     to_date('19-FEB-15 ', 'DD-MON-YY') + 1 

如果您真的想使用TRUNC,则必须创建基于功能的索引

请查看此链接https://hoopercharles.wordpress.com/2010/03/08/impact-of-the-trunc-function-on-an-indexed-date-column/

答案 1 :(得分:0)

绝对create_date列也存储时间戳。你曾经尝试过trunc(d.create_date)= TO_DATE('19-FEB-15','DD-MON-YY')。

这工作Sam感谢你:)