我有一个在很多报告中使用的观点。该视图具有作为主要参数的日期列。但是现在我必须使用一系列的日期,而不是所有报告的单一日期;即两个日期列之间的日期。
例如:视图包含以下列:COL1、DATE、DATE1、DATE2。报告(通常)是这样运行的:
SELECT col1, DATE FROM MY_VIEW WHERE DATE <= :PDATE;
我想要的是:
SELECT col1, DATE FROM MY_VIEW WHERE [dates between DATE1 and DATE2] <= :PDATE;
因此,我需要一个视图,它有一个列,存储日期之间的DATE 1和DATE 2和行返回查询时:PDATE等于或小于任何日期范围内没有改变查询。
3条答案
按热度按时间wgeznvg71#
你需要拆分WHERE条件,首先检查日期是否在Date1和date2之间,然后检查它们是否更小。
只有当这两个条件都为真时,才会返回一行。
svujldwt2#
您可以生成以下范围内的日期列表:
测试数据:
此选择包括下限和上限日期。将connectby子句中的
t.date2 + 2
更改为t.date2 + 1
,以排除上边界日期。xqnpmsa83#
你说DATE2总是大于DATE1。因此,有一个从DATE1到DATE2定义的日期范围。对于与另一个日期的比较,根据比较的不同,比较DATE1或DATE2就足够了,其他日期将满足相同的标准:
范围内的所有日期必须小于或等于:PDATE。
范围内至少有一个日期必须小于或等于:PDATE。
范围内的所有日期必须大于或等于:PDATE。
范围内至少有一个日期必须大于或等于:PDATE。