在SQL Oracle中按日期差异进行筛选
我有一个脚本,它从许多不同的表中收集数据,并返回所有结果,这个脚本不是我写的,有1000多行代码。要简化:在SQL Oracle中按日期差异进行筛选,sql,oracle,where,Sql,Oracle,Where,我有一个脚本,它从许多不同的表中收集数据,并返回所有结果,这个脚本不是我写的,有1000多行代码。要简化: SELECT date_of_opening, ...<many other columns> FROM <some other sub queries>; 由于它返回整个数据集,我想将其限制为仅在30天内打开的数据集,我尝试了: SELECT * FROM (SELECT d
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:不一致的数据类型:预期的字符获取日期
但是,如果我在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>;
例如,假设开业日期为2010年12月31日,则差值为-23
我还尝试先计算差异,然后过滤-30和-1之间的差异,但得到
ORA-00932:不一致的数据类型:预期数量获取日期
期初的过去期初数据类型为日期
我可以使用什么方法过滤结果,或者这种行为的原因是什么?30天的时间可能是:
WHERE date_of_opening BETWEEN (to_date('23.01.2011','dd.mm.yyyy')-30) and (to_date('23.01.2011','dd.mm.yyyy'))
假设开业日期确实是一个日期。30天的期限可能是:
WHERE date_of_opening BETWEEN (to_date('23.01.2011','dd.mm.yyyy')-30) and (to_date('23.01.2011','dd.mm.yyyy'))
假设开业日期确实是一个日期。很好,谢谢。你知道我的方法有什么错误吗?不确定,但我认为这种方法可读性更好,如果可以的话,可以使用开盘日期的索引。很好,谢谢。你知道我的方法有什么错误吗?不确定,但我认为这种方法可读性更好,如果可用,可以使用开盘日期索引。在你没有向我们显示的查询部分,开盘日期是否可能转换为其他类型?因为你的查询应该是有效的:@a_horse_和_no_name我在查询中没有看到施法动作。同样在select中,我试图计算差异,但它实际上成功了,我也尝试了_numberdifference>-30,这一点都没有帮助。你看了我链接中的示例了吗?你给我们展示的条件是有效的。在你没有向我们展示的查询部分,一定有什么东西打破了这一点。@a_horse_与_no_name是的,我访问了链接,我自己也尝试过,但我真的找不到任何关于开幕日期的演员,开始怀疑自己是否错过了什么,但是现在再检查两次,仍然没有看到任何对开张日期的操纵,因为我说:你没有给我们看的部分一定有什么东西打破了这一点。可能是您不知道的隐式投射。但是,由于您选择不向我们显示完整的代码,这是不可能回答的。在您未向我们显示的查询部分,是否可能将开始日期转换为其他类型?因为你的查询应该是有效的:@a_horse_和_no_name我在查询中没有看到施法动作。同样在select中,我试图计算差异,但它实际上成功了,我也尝试了_numberdifference>-30,这一点都没有帮助。你看了我链接中的示例了吗?你给我们展示的条件是有效的。在你没有向我们展示的查询部分,一定有什么东西打破了这一点。@a_horse_与_no_name是的,我访问了链接,我自己也尝试过,但我真的找不到任何关于开幕日期的演员,开始怀疑自己是否错过了什么,但是现在再检查两次,仍然没有看到任何对开张日期的操纵,因为我说:你没有给我们看的部分一定有什么东西打破了这一点。可能是您不知道的隐式投射。但由于您选择不向我们展示完整的代码,这是不可能回答的。