【发布时间】:2017-09-12 15:32:22
【问题描述】:
我有一个脚本,它从许多不同的表中收集数据并返回所有结果,该脚本不是我编写的,并且有 1000 多行代码。为了简化:
SELECT
date_of_opening,
...<many other columns>
FROM
<some other sub queries>;
由于它返回整组数据,我想限制它,仅限于那些在 30 天内打开的数据,我尝试过:
SELECT *
FROM
(SELECT
date_of_opening,
...<many other columns>
FROM
<some other sub queries>)
WHERE date_of_opening - to_date('23.01.2011','dd.mm.yyyy') BETWEEN (-30) and (-1) ;
导致
ORA-00932:不一致的数据类型:预期的 CHAR 得到了 DATE。
但是,如果我在 select 中尝试相同的查询,它会将差异显示为正确的:
SELECT
date_of_opening,
date_of_opening - to_date('23.01.2011','dd.mm.yyyy') as difference,
...<many other columns>
FROM
<some other sub queries>;
假设例如 date_of_opening 是 31.12.2010 差异将是 -23
我也尝试过先计算差异,然后在where difference between (-30) and (-1) 中过滤它,但得到了
ORA-00932:不一致的数据类型:预期 NUMBER 得到 DATE
past_of_opening 的数据类型是日期
我可以使用什么方法来过滤结果,或者这种行为的原因是什么?
【问题讨论】:
-
是否有可能
date_of_opening在您未向我们显示的查询部分被转换为不同的类型?因为您的查询应该可以工作:dbfiddle.uk/… -
@a_horse_with_no_name 我没有在查询中看到强制转换操作。同样在选择中我尝试计算差异,它实际上成功了,我也尝试过
to_number(difference) > (-30),这根本没有帮助 -
您看过我链接中的示例了吗?您向我们展示的条件有效。您未向我们展示的查询部分中一定有某些内容破坏了这一点。
-
@a_horse_with_no_name 是的,我访问了链接,我之前也尝试过,但是我真的在
date_of_opening上找不到任何演员,开始怀疑自己是否错过了什么,但重新检查了现在两次仍然看不到对date_of_opening的任何操纵 -
正如我所说:您没有向我们展示的部分中一定有一些东西破坏了这一点。可能是您不知道的 implicit 演员表。但是由于您选择不向我们展示完整的代码,因此无法回答。