Oracle SQL:30天后每隔30天就会生效一次

时间:2016-10-10 06:16:02

标签: sql oracle

我在Oracle SQL中并不是很好,但我试图查看类似这样的日期

例如:2000年1月1日

我如何检查是否已经过了30天,还有60个月等等。 基本上我需要制定一个月后会恢复的条件,依此类推。我可以逐一检查它,但它显然不好。

DECLARE
appn_date DATE;
BEGIN
appn_date := Trunc(TO_DATE ('10-AUG-2016'));

IF (appn_date = trunc(sysdate) - interval '30' day) THEN
DBMS_OUTPUT.PUT_LINE('Yes');

ELSE 
DBMS_OUTPUT.PUT_LINE('No');

END IF;

END; 

它应该输出Yes,因为已经过了30天,但它也会在60天,90天后输出Yes,依此类推。我认为modulo会对此有所帮助。任何想法?

1 个答案:

答案 0 :(得分:1)

要检查该列的值是否早于30天,请使用:

where the_date_column <= sysdate - interval '30' day

或稍短但相同

where the_date_column <= sysdate - 30

您需要使用add_months()

几个月
where the_date_column <= add_months(sysdate, -60);

由于Oracle DATE不是真正的“日期”而是“日期时间”,您可能需要trunc()(对于两者:日期列和sysdate)如果您不是想要考虑时间的一部分。

有关如何specify intervalsavailable date functions

的详细信息,请参阅手册