PLSQL - Months_Between的理解和使用

news2025/2/22 2:48:08

Months_Between是一个内置的日期操纵函数,用于计算两个日期相隔的月份数。Oracle文档的介绍如下:

MONTHS_BETWEEN returns number of months between dates date1 and date2. The 
month and the last day of the month are defined by the parameter NLS_CALENDAR. If 
date1 is later than date2, then the result is positive. If date1 is earlier than date2, then 
the result is negative. If date1 and date2 are either the same days of the month or both 
last days of months, then the result is always an integer. Otherwise Oracle Database 
calculates the fractional portion of the result based on a 31-day month and considers 
the difference in time components date1 and date2.

总结一下可以归纳出以下几点:

  • Months_Between总是计算date1 - date2
  • Months_Between在两种情况下返回整数:
  1. date1和date2的日相同(eg. 2023/05/07和2023/06/07)
  2. date1和date2都是月份的最后一天(eg. 2023/02/28和2023/03/31)
  • 当参数不满足返回整数的条件时,计算结果的整数部分是两日期相隔的整月数,剩余不足整月的天数,将除以31作为小数部分

通过一些例程来理解上面第三条:

例程1:计算2023/01/01到2023/03/02

1月1日至3月1日为整两个月,余一天,1/31=0.032258064516129

SQL> SELECT Months_Between(DATE '2023-03-02',
  2                        DATE '2023-01-01')
  3    FROM dual;

MONTHS_BETWEEN(DATE'2023-03-02',DATE'2023-01-01')
-------------------------------------------------
                                 2.03225806451613

例程2:计算2023/03/01到2023/01/02(负数)

3月1日到2月1日为整-1月,余30天,30/31=0.967741935483871

SQL> SELECT Months_Between(DATE '2023-01-02',
  2                        DATE '2023-03-01')
  3    FROM dual;

MONTHS_BETWEEN(DATE'2023-01-02',DATE'2023-03-01')
-------------------------------------------------
                                -1.96774193548387

这样的算法不能总是令人满意,比如计算2023/01/31至2023/02/28时得知是一个月,而向前加一天从2023/01/30算起结果却不及一个月了,更有趣的是继续向前加到2023/01/28这一天结果又成了一个月(与此同时这四个起始日期用add_months加一个月结果都是2023/02/28)

SQL> SELECT Months_Between(DATE '2023-02-28', DATE '2023-01-31') a1,
  2         Months_Between(DATE '2023-02-28', DATE '2023-01-30') a2,
  3         Months_Between(DATE '2023-02-28', DATE '2023-01-29') a3,
  4         Months_Between(DATE '2023-02-28', DATE '2023-01-28') a4
  5    FROM dual;

   A1                   A2                   A3    A4
----- -------------------- -------------------- -----
    1    0.935483870967742    0.967741935483871     1

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/619661.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

jenkins主从节点安装及pipeline构建

一、背景 通过Jenkins主节点配置的pipeline下发给从节点执行,从而兼容容器化执行 二、安装主节点 docker-compose.yml jenkins:user: rootrestart: alwaysimage: jenkinsci/blueoceancontainer_name: jenkins# network_mode: hostports:- "8081:8080"-…

BOS EDI Excel 方案简介

BOS EDI & Excel 方案简介 本文将继续分享BOS示例工作流:使用Excel端口和Email端口生成一系列文件,完成与BOS的EDI通信。 下载工作流 下载示例文件 BOS EDI到Excel示例流具有预配置的端口,用于从BOS的EDI集成规范转换以下交易集&…

2022年国赛高教杯数学建模D题气象报文信息卫星通信传输解题全过程文档及程序

2022年国赛高教杯数学建模 D题 气象报文信息卫星通信传输 原题再现 在某些紧急救援任务中,需要进行物资空投。在地面通信系统瘫痪的情形下,为了更好地获得准确完整的地面气象观测信息,通常对任务区域的重要目标点采用派遣气象分队的方式来获…

如果让你来设计CPU之内存篇

哈喽,我是子牙,一个很卷的硬核男人。深入研究Windows内核、Linux内核、Hotspot源码…聚焦做那些大家想学没地方学的课程:手写操作系统、手写虚拟机、手写模拟器、手写编程语言… 目前已经做了两个成熟的课程:手写JVM、手写OS&…

PPP认证协议详解

PPP认证协议详解 1. 引言 PPP(Point-to-Point Protocol)认证协议在计算机网络中扮演着重要的角色。它是一种用于建立和认证网络连接的协议,广泛应用于各种网络环境,包括互联网接入、虚拟专用网络(VPN)和远…

【头歌】试的学习

1.基本路径测试 2.画出程序控制流图 3.计算流图的环形复杂度 4.确定线性独立路径的基本集合 5.设计测试用例 基本路径测试 除了逻辑覆盖,还有一种常用的白盒测试的测试方法:基本路径测试。基本路径测试是 Tom McCabe提出的一种白盒测试技术。使用这种技…

c++学习——继承

继承 **继承****继承的案例****继承的三种方式方式&#xff1a;****继承中的对象类型****继承中的构造和析构顺序****继承中同名成员的处理****同名静态成员处理****多继承语法****菱形继承** 继承 普通的输出 #define _CRT_SECURE_NO_WARNINGS #include <iostream> us…

8. 让java性能提升的JIT深度解剖

JVM性能调优 1. C1、C2与Graal编译器1.1 C1编译器1.2 C2编译器1.3 分层编译 2. 热点代码3. 热点探测4. 方法调用计数器5. 回边计数器6. 编译优化技术6.1 方法内联 7. 锁消除8. 栈上分配9. 逃逸分析技术10. 标量替换 本文是按照自己的理解进行笔记总结&#xff0c;如有不正确的地…

【LeetCode热题100】打卡第14天:下一个排列最长有效括号

文章目录 【LeetCode热题100】打卡第14天&#xff1a;下一个排列&最长有效括号下一个排列⛅前言&#x1f512;题目&#x1f511;题解 最长有效括号&#x1f512;题目&#x1f511;题解 【LeetCode热题100】打卡第14天&#xff1a;下一个排列&最长有效括号 下一个排列 …

如何入门挖掘SRC?

挖洞其实算是web渗透中第一个明确的关卡 越过这个坎&#xff0c;从此天高任鸟飞&#xff0c;海阔凭鱼跃。越不过&#xff0c;就永远越不过。 先说平台&#xff1a; 漏洞响应平台&#xff1a;实战渗透测试&#xff0c;同时能获得一些外快。 补天漏洞响应平台&#xff1a;http…

Netty核心技术五--Netty高性能架构设计

1. 线程模型基本介绍 不同的线程模式&#xff0c;对程序的性能有很大影响&#xff0c;为了搞清Netty 线程模式&#xff0c;我们来系统的讲解下 各个线程模式&#xff0c; 最后看看Netty 线程模型有什么优越性.目前存在的线程模型有: 传统阻塞 I/O 服务模型Reactor 模式 根据 R…

郭光灿团队实现低温集成量子纠缠光源

中国科大郭光灿院士团队在集成化量子光源制备研究中取得重要进展。该团队任希锋研究组基于低温集成自发四波混频过程&#xff0c;展示了低温条件下集成量子纠缠光源的制备&#xff0c;相关成果于6月2日发表在光学知名学术期刊Optica上。 “利用低温综合四波混合技术产生纠缠现象…

Mapbox表达式详细解读

初学mapbox 的小伙伴们一定会被表达式给弄的晕头转向的。明明条件判断或者回调函数能解决的问题。mapbox里非得让你用表达式。这确实比较ex。 不过我们既然遇到了,也不要怕,这篇文章我就带着大家一点一点的搞明白这个所谓的表达式。 首先从宏观上讲,要知道为什么使用表达式…

【面试高频】cookie、session、token?看完再也不担心被问了

在以往的面试记录里&#xff0c;我又看到了一个多次被问到的知识点&#xff0c;那就是 cookie、session、token 的区别有哪些&#xff1f;如果现在来问你&#xff0c;不知道你能否说清楚呢&#xff1f; 今天不仅仅是整理出这三者的区别&#xff0c;更重要的是能够真正去理解这三…

Python | print写入日志

Python | print写入日志 有时我们需要将屏幕上打印的消息保存到一个文件中&#xff0c;如果每条信息都通过调用写入函数来实现&#xff0c;就太麻烦了 这里自己定义1个日志类&#xff0c;然后将 sys.stdout 设置为该类即可&#xff0c;非常方便 sys.stdout Logger(fileName …

卡尔曼滤波与组合导航原理(八)遗忘滤波

函数模型 { X k Φ k l k − 1 X k − 1 Γ k − 1 W k − 1 Z k H k X k V k \left\{\begin{array}{l} \boldsymbol{X}_{k}\boldsymbol{\Phi}_{k l k-1} \boldsymbol{X}_{k-1}\boldsymbol{\Gamma}_{k-1} \boldsymbol{W}_{k-1} \\ \boldsymbol{Z}_{k}\boldsymbol{H}_{k} \…

C语言:使用 普通方法 和 二分查找算法(折半查找算法) 在一个有序数组中查找具体的某个数字n

题目&#xff1a; 从键盘输入数字n&#xff0c;在一个 有序数组 中查找具体的某个数字n。 思路一&#xff1a;普通方法 &#xff08;逻辑简单&#xff0c;在无序数组中也可以使用&#xff0c;但效率较低&#xff0c;需要逐个查找&#xff09; 总体思路&#xff1a; &#xff…

日常培训管理-参训名单/BootstrapTable获取表数据 / js 删除两个数组中id相同的对象/

---2022.11.9 1、 现在有一个功能是从下面待选名单中选中&#xff0c;再点击这个添加按钮&#xff0c;就会将这些人添加到上面这个参训名单&#xff0c;然后再给其中每个人手动打分。分打完 BootstrapTable中有两组数据&#xff0c;在下面待选名单数据条目前面中打钩选中&am…

从零开始学习CTF——CTF基本概念

这一系列把自己学习的CTF的过程详细写出来&#xff0c;方便大家学习时可以参考。 一、CTF简介 01」简介 中文一般译作夺旗赛&#xff08;对大部分新手也可以叫签到赛&#xff09;&#xff0c;在网络安全领域中指的是网络安全技术人员之间进行技术竞技的一种比赛形式。 CTF…

odoo-028 odoo前端页面显示跟后台数据库内容不一致

文章目录 一、问题二、排查三、总结 版本&#xff1a;odoo13 一、问题 同步多端数据的时候发现&#xff0c;产品product.template页面显示的内容跟用接口查询出来的不一样&#xff0c;接口查询的结果中name值总是后面多一些数据。 页面显示&#xff1a;六甲基二硅胺锂 1.0M T…