我是SQL编程的新手.
我需要制作一个比较日期的程序.过程中唯一的参数是用户在Java程序中键入的日期.我需要检查一下这个参数(日期)是否在一年前.换句话说,我需要将它与SYSDATE减去一年进行比较.如果是这种情况,我必须"清除"与"时间表"相关的所有表格(其中有2个).
例如,假设用户输入2013-04-13,我的程序必须将它与SYSDATE进行比较 - 1年(在这种情况下,它将是2014-12-03).由于该值小于今天减去一年,因此必须清除表"MovieSchedule"和"ChannelSchedule".如果输入的日期是2014-12-16,因为它现在超过SYSDATE减去一年,该过程必须发回一个我将能够在Java程序中使用的显式错误.
现在,正如我所说,我对PL/SQL中的程序编程完全不熟悉,所以我可以通过在互联网上查找教程来提出这些内容:
CREATE OR REPLACE PROCEDURE purge_schedule(purgeDate date) AS DECLARE currentDate := to_date(SYSDATE, 'YYYMMDD'); BEGIN -- IF purgeDate < (currentDate - 1year) -- delete content in "MovieSchedule" and "ChannelSchedule" -- ELSE -- return explicit error END purge_schedule;
我甚至不知道这是否是编写我想要的程序的正确方法.正如你所看到的,我的问题是如何在程序中实现我的条件,而不是它背后的逻辑.我责怪我缺乏语言练习.
如果您需要更多信息以帮助我,请告诉我是否需要更具体.谢谢你的帮助,祝你有个美好的一天:)
第1步,定义年份.应该是显而易见的,但不是.我发现月份和年份的定义各不相同.我看到一年被定义为52周,这是从来没有实际的一年,365天,一年比一年少一点,每4年一次,偶尔360天!(30天/月*12个月)
sysdate - 365
365天前给出了一个日期.
ADD_MONTHS(sysdate, -12)
将在12个月前给出日期.在sysdate
2月29日的情况下,结果将是上一年的2月28日.
sysdate - interval '1' year
很诱人,但是interval year to month
当"结果"是不存在的那一天时,算术会抛出错误.
select date '2012-02-28' - interval '1' year from dual;
2011年2月28日
select date '2012-02-29' - interval '1' year from dual;
ORA-01839:日期对指定的月份无效