暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 最近的闰年的日期

askTom 2017-04-20
288

问题描述

我有问题要解决。
查找事件的最近 (下一个或上一个) 日期。它发生在每个闰年的特定日期。让我们说5月1日如何生成这些日期并获得最接近的日期?
谢谢。

我们要求提供更多信息:

只是为了澄清,要求是: 输入:-已知事件日期,例如 “5月1日”,它只发生在闰年-指定日期,“例如2011年3月12日” 任务: 找到离指定日期最近的事件日期。什么事?

我的加法信息:
任务更像是: 查找与当前日期最近的事件日期。像系统一样。

专家解答

所以这里有一个event_date = 5月12日的例子。让我们在任何特别提名的年份中获得所有5月12日的4年。

SQL> select add_months(date '2019-05-12',-48+rownum*12) dte,
  2           to_number(to_char(add_months(date '2019-05-12',-48+rownum*12),'yyyy')) yy
  3    from dual connect by level <= 8;

DTE               YY
--------- ----------
12-MAY-16       2016
12-MAY-17       2017
12-MAY-18       2018
12-MAY-19       2019
12-MAY-20       2020
12-MAY-21       2021
12-MAY-22       2022
12-MAY-23       2023

8 rows selected.
复制


现在我们可以把它限制在闰年

SQL> select *
  2  from (
  3    select add_months(date '2019-05-12',-48+rownum*12) dte,
  4           to_number(to_char(add_months(date '2019-05-12',-48+rownum*12),'yyyy')) yy
  5    from dual connect by level <= 8
  6    )
  7  where  mod(yy,4)=0 and ( mod(yy,100) != 0 or mod(yy,400) = 0 );

DTE               YY
--------- ----------
12-MAY-16       2016
12-MAY-20       2020
复制


然后,我们只找到这两个中最接近感兴趣的日期 (在本例中为sysdate)

SQL> select dte
  2  from (
  3    select add_months(date '2019-05-12',-48+rownum*12) dte,
  4           to_number(to_char(add_months(date '2019-05-12',-48+rownum*12),'yyyy')) yy
  5    from dual connect by level <= 8
  6    )
  7  where  mod(yy,4)=0 and ( mod(yy,100) != 0 or mod(yy,400) = 0 )
  8  order by abs(sysdate-dte)
  9  fetch first 1 rows only;

DTE
---------
12-MAY-16
复制


「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论