- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
甲骨文:12c
描述:尝试使用 add_months 将 99 年添加到日期中,该方法可以工作,但它会在返回日期值中添加额外的一天。我应该如何正确地为日期添加年份?
declare
toRetDate DATE;
inputDate DATE;
numYears number;
begin
numYears := 99;
inputDate := TO_DATE('28-FEB-85', 'DD-Mon-YY' );
toRetDate := add_months(inputDate, numYears*12);
DBMS_OUTPUT.put_line(toRetDate);
end;
输出:29-FEB-84
最佳答案
ADD_MONTHS 不会在结果中添加一天。相反,它有一个非常普遍的功能:如果您将 MONTHS 添加到某个日期,并且该日期是该特定月份/年份的月底,则 ADD_MONTHS 的结果是结果月份的最后一天。
例如,如果您在 1 月 31 日基础上添加一个月,则始终会得到 2 月 28 日(闰年则为 2 月 29 日)。如果将 6 月 30 日加一个月,则得到 7 月 31 日。
如果你在 2 月 28 日加上一个月,你就会得到 3 月 31 日,除非它是闰年;在闰年中,2 月 28 日不是该月的最后一天,因此如果添加一个月,就会得到 3 月 28 日。
在所有情况下,如果结果的天数大于结果月份的天数,则结果只是该月的最后一天。
编辑:在这个答案下面的评论中,OP询问是否有办法保持该月的同一天,除了2月29日(应该变成2月29日)。非闰年为 28)。
答案是肯定的。正如 @Xing 在另一个答案中所示,添加 interval '99'year
将保留日期,但当输入日期为 2 月 29 日且结果年份不是闰年时,可能会导致问题。这可以通过初步检查来解决。可以使用 IF 语句或 CASE 表达式来完成。我更喜欢后者,因为它在 PL/SQL 和 SQL 中的工作原理相同;普通 SQL 中没有 IF。
toretdate := case when to_char(inputdate, 'mm-dd') = '02-29'
then (inputdate + 1) + interval '99' year - 1
else inputdate + interval '99' year end
诀窍是,当inputdate
是2月29日时,将其向前推进一天,使其成为3月1日,然后添加99年(仍然是3月1日),然后减去一天,使其成为3月1日2 月 29 日(如果是闰年)或 2 月 28 日(否则)。
关于oracle - plsql - oracle add_months 添加额外的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42818708/
在表列中,我有这个值: DV-2011-01-000004(数据类型为varchar2) 我怎样才能得到字符串“000004”的一部分?在 t-sql 中,他们有这个 right() 函数,但在 PL
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 9 年前。 Improve this qu
当我在 plsql 过程的主体中使用 create 语句时,出现错误PLS-00103 在期望以下之一时遇到符号创建....谁能告诉我这是什么原因和解决方案。 最佳答案 在 PL/SQL 中你不能直接
我一直在使用 PL/SQL 为 Oracle db 创建包,我正在尝试找到一种不使用“put_line”命令来调试 PL/SQL 包的好方法,有没有人有一些关于如何成功调试一个好的提示Toad 或 S
我有一个函数会返回一个类型为 my_table%ROWTYPE 的记录,在调用者中,我可以检查返回的记录是否为空,但是 PL/SQL 提示 if 语句 PLS-00306: wrong number
我想在自动化测试中检查 PL/SQL 查询语法,看起来 https://github.com/porcelli/plsql-parser 可能对此有用。我并不容易找到我将如何安装和使用它。 请注意,这
1、PL/SQL官网下载 官网下载地址:https://www.allroundautomations.com/registered-plsqldev/ 或者在我的网盘下载 链接: h
我有一个充满了我想要运行的 PLSQL 脚本的目录,问题是该目录的内容是动态的,我无法知道这些脚本的名称是什么。 我必须编写一些东西来运行该目录中的所有 sql 文件,但我找不到在 PLSQL 中调用
我正在构建一个使用 PHP 从 Oracle10g 数据库服务器获取数据的应用程序。我的输入表单有一系列复选框,这些复选框通过数组提交到处理页面(代码过滤到相关元素): 处理页面调
我收到以下错误。在 SELECT CASE 语句处收到错误。 PLS-00428: an INTO clause is expected in this SELECT statement FOR RE
我对 plsql 中的动态变量有点了解。我在 EXECUTE IMMEDIATE 上收到错误“无效的主机/绑定(bind)变量名称”陈述。提前致谢。 CREATE OR REPLACE PROCEDU
我正在使用 execute immediate 在 pl/sql 中创建一个临时表,并且还在表中插入为什么要创建表。 之后我更新表格。但是我收到错误表不存在,因为它没有创建表,所以立即执行 示例代码-
我有一个程序,它每隔一小时运行一次,填充一张表。程序处理的记录很多,所以每次执行大约需要12~17分钟。 您现在是否有办法(即触发器)记录每次执行的持续时间(即记录到表中)? 最佳答案 我不知道允许自
我正在分析一些遗留代码。它是大约 80.000 行旧的 plsql 代码。乍一看,源代码中有相当多的重复内容需要删除。而不是做 diff 的手册并查看每个文件,必须有一些工具/命令行混淆来检测源代码的
我是 oracle 作业脚本的新手。我写了一些清除程序来清除所有旧数据并保留过去 3 个月的数据...程序已成功执行。当我手动调用时它也可以工作。程序如下: CREATE OR REPLACE PRO
以下是我的查询: Select Count(*) from Table1 s left join Table2 d
如何使用 put 函数。我的程序不是用 put 编译的。但 putline 工作正常。我想在同一行打印 最佳答案 下面是使用 UTL_FILE.PUT 和 UTL_FILE.PUT_LINE 调用的代
使用关联数组时可以使用SELECT FROM吗?我正在通过.NET应用程序将数组传递给存储过程,并且我希望能够从另一个表中进行选择时将该数组用作条件。可以说我要向该过程传递一个ID数组,我想能够做到这
您好,我有一个 oracle 函数已经存在于数据库中,我必须使用它。如果我如下调用该函数,它工作正常 select PKG_Util.employeedetails('12345') from dua
我在 PL/SQL 中有一个情况,我的过程每分钟都会被一个作业调用。代码如下 procedure ExecuteProc is CURSOR c1 IS SELECT * FROM t
我是一名优秀的程序员,十分优秀!