美文网首页程序员
Oracle计算N天前、N月前

Oracle计算N天前、N月前

作者: 是阿离 | 来源:发表于2017-10-02 17:28 被阅读0次

问题

想查询N天前的日志文件相关信息,日志文件名格式为:interface_YYYYMMDD.log

方案

1、如何计算N天前

在oracle中,可以对data类型的直接+1来将天数加一
具体过程为:先截取文件名上时间,转为date类型,再加一后转为char与传入的参数值checkDate进行比较
to_char(to_date(SUBSTR(t.file_name, 11, 8), 'yyyymmdd') + 1, 'yyyymmdd') = &checkDate
当然,由于对date类型的加减操作是基于的,可以通过对基准单位进行相关操作,例如:

  • SYSDATE - 10:十天前
  • SYSDATE + 1/24:一小时后
  • SYSDATE + 1/(24 * 60):一分钟后
  • SYSDATE + 1/(24*60*60):一秒后

也存在另一种写法,使用INTERVAL时间间隔:

  • SYSDATE + INTERVAL '100' DAY(3):一百天以后,注意DAY(3):3表示精确度,表示偏移量'100'为3位。DAY默认为DAY(2)
  • SYSDATE + INTERVAL '12' HOUR:十二小时后
  • SYSDATE + INTERVAL '100' MINUTE:一百分钟后
  • SYSDATE + INTERVAL '100' Second:一百秒后
2、如何计算N月前:

也许你想到了使用INTERVAL '1' MONTH来计算。确实,一般情况下,使用该方法得到的结果是正确的。验证

SELECT to_date('20170831', 'yyyymmdd') + INTERVAL '1' MONTH FROM dual

会发现报错:ORA-01839

Oracle存在add_months(date, offset)函数,可以计算N月前:
add_months(SYSDATE, -1):一月前
同样,验证20170831:

SELECT add_months(to_date('20170831', 'yyyymmdd'), 1) FROM dual

输出为:2017/9/30

3、如何计算N年前:

add_years()? 并没有……
add_months(to_date('20170831', 'yyyymmdd'), -12*3):三年前

参考文章:

oracle 用interval 求时间
ora 01839这个错误是怎么回事?

相关文章

  • Oracle计算N天前、N月前

    问题 想查询N天前的日志文件相关信息,日志文件名格式为:interface_YYYYMMDD.log 方案 1、如...

  • n 月前

    你,哀叹着 你,无奈着 你,乐呵着 我知道 你的心 五味陈杂 百感交集 那是 深深地 强烈地 无奈,无奈 揪心,揪...

  • sql + python 天下无敌

    1,oracle as 前加'' as 后不加'' 2,oracle 前n行用rownum 3,pandas 分类...

  • 2019-06-03

    离线数据开发 一、同一计算平台 实时技术 离线:在今天(T)处理N天前(T-N,N>=1的数据),时间粒度为天。 ...

  • 获取N天(月)前的日期

    获取一个月前的日期 获取N天前的日期

  • Swift-日历相关02

    一,日历中ordinality()方法使用: 1,计算本月第n周,本月第n天,本周第n天 2,计算本年的第n周,本...

  • 剑指offer | 计算1+2+...+n

    计算1+2+...+n 计算等差数列前n项和 示例输入:10输出:55

  • 第五周第五天

    javascript 计算N个月前的日期(YYYY-MM-DD) 标签: javascript 日期 date 做...

  • js获取当前日期的前n天和后n天的日期

    js获取当前日期前n天 和 后n天的日期 ⚠️ 当前日期2022-03-30⚠️ n是正数 前n天的日期⚠...

  • 03.计算N的阶乘?

    计算N的阶乘n! = 1 * 2 * ……(n-1)n0! = 1

网友评论

    本文标题:Oracle计算N天前、N月前

    本文链接:https://www.haomeiwen.com/subject/ffooextx.html