当前位置:  开发笔记 > 数据库 > 正文

如何比较PL/SQL过程中的日期?

如何解决《如何比较PL/SQL过程中的日期?》经验,为你挑选了1个好方法。

我是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> Shannon Seve..:

第1步,定义年份.应该是显而易见的,但不是.我发现月份和年份的定义各不相同.我看到一年被定义为52周,这是从来没有实际的一年,365天,一年比一年少一点,每4年一次,偶尔360天!(30天/月*12个月)

sysdate - 365 365天前给出了一个日期.

ADD_MONTHS(sysdate, -12)将在12个月前给出日期.在sysdate2月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:日期对指定的月份无效

推荐阅读
女女的家_747
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有