2016-11-21 121 views
3

我在Oracle 12 c数据库上有一个非常奇怪的行为。当我做这样的事情:Oracle 12c:trunc(日期)错误导致错误数据

select count(*) from fact_table, date_dim, dim_table where 
date_dim.date >= trunc(sysdate)-1 
and fact_table.DATE_ID = date_dim.DATE_ID 
and fact_table.DIM_ID = dim_table.DIM_ID; 

...我得到一定的数字。当我将'> ='更改为'='时,奇怪的行为开始 - 只有,然后才能获得双倍数额。我检查了连接条件,但据我所知,如果我过滤日期'> ='昨天而不是日期'='昨天过滤的数量应该更大或相同。

为什么会发生这种情况?有没有可能导致SQL中重复数据的设置?

编辑连接条件两个连接条件只有1个结果。

+0

如果 “加盟条件1” 啊, r“join cond 2”是'where where date_dim.date = trunc(sysdate)-1'或类似的东西,这种行为会有道理,不是吗? –

+0

我不认为你的结果的有效性可以在不知道'连接'条件是什么的情况下进行评估。 –

回答

2

一些激烈的分析,我发现,我面临一个Oracle错误后 - >错误18461054:TRUNC显示日期BIND ON分区表给出错误的结果

所以这个问题可以用TRUNC或圆形日期occure。

的解决方法为当前会话是

alter session set "_optimizer_generate_transitive_pred"=false; 

还有一个修补软件18461054:DATE WITH上绑定分区表TRUNC给出错误的结果

希望帮助别人比我:)

最佳,

帕特里克