我正在尝试使用以下查询获取过去 30 天的计数 -
SELECT date_occured, COUNT(*) FROM problem
WHERE date_occured >= (CURRENT_DATE - 30)
GROUP BY date_occured;
//date_occured field is of type DATE.
基本上,在我的查询中,我试图仅比较条件中的日期部分date_occured >= (CURRENT_DATE - 30)
,不过好像也比较时间。
我尝试了 TRUNC 如下 -
TRUNC(date_occured) >= TRUNC(CURRENT_DATE - 30)
但是当运行查询时它永远不会返回。
我也尝试过——
SELECT date_occured, COUNT(*) FROM problem
GROUP BY date_occured
HAVING TRUNC(date_occured) >= TRUNC(CURRENT_DATE - 30);
再次它再也不会回来。
如何仅比较 Oracle 中两个 DATE 值的日期部分?
对于这种情况,您只需要 TRUNC 右侧:
WHERE date_occured >= TRUNC(CURRENT_DATE - 30)
为什么?因为如果 TRUNC(date_occurred) 晚于 TRUNC(CURRENT_DATE - 30),则 TRUNC(date_occurred) 之后的任何时刻也必然晚于 TRUNC(CURRENT_DATE - 30)。
显然 date_occurred >= TRUNC(date_occurred) 总是正确的(想一想)。
逻辑上说,如果 A >= B 且 B >= C,则 A >= C
现在替换:
- A : 发生日期
- B : TRUNC(发生日期)
- C : TRUNC(CURRENT_DATE - 30)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)