当前位置: 首页 > 知识库问答 >
问题:

在oracle中计算年、月、日

邴星洲
2023-03-14

我正在开发一个程序,它采用开始日期和结束日期,并返回年、月和日的不同值。每个类别都有自己的代码部分,这是我一直在使用的代码,到目前为止,它一直是半精确的,直到几天(有时是几个月。我甚至不想在这一点上愚弄闰年)

Ex Start:04/10/2000 End:04/10/2006应该给我6年零个月零天。

年份代码:

SELECT
 trunc(months_between((to_date(:main_DT_DateEnd1,'MM/DD/YYYY')),(to_date(:main_DT_DateBeg1,'MM/DD/YYYY'))) / 12) as "Years1"
FROM dual

月份代码:

SELECT
  trunc(mod(months_between((to_date(:main_DT_DateEnd1,'MM/DD/YYYY')),(to_date(:main_DT_DateBeg1,'MM/DD/YYYY'))), 12)) as "Months1"
FROM dual

天数代码:我已经尝试了多个版本,但没有太大的成功,例如,我可以计算天数之间的总天数,但由于某些天数中有不同的月份,划分变得更加麻烦。这是我得到的最接近的一个,如果天数相同,则不需要计算,否则使用子串减去它们。1)

SELECT

CASE
 WHEN substr((to_date(:main_DT_DateBeg1,'MM/DD/YYYY')),4,5) = substr((to_date(:main_DT_DateEnd1,'MM/DD/YYYY')),4,5)
 THEN 0

 WHEN substr((to_date(:main_DT_DateBeg1,'MM/DD/YYYY')),4,5) <  substr((to_date(:main_DT_DateEnd1,'MM/DD/YYYY')),4,5)
 THEN to_number(substr((to_date(:main_DT_DateEnd1,'MM/DD/YYYY')),4,5)) -  to_number(substr((to_date(:main_DT_DateBeg1,'MM/DD/YYYY')),4,5))

END as "Days_1"

FROM dual

感谢您抽出时间,感谢那些想知道这是工作经验计算器的人:)

共有1个答案

子车鸿才
2023-03-14

请参阅此处的示例:http://docs.oracle.com/cd/E11882_01/server.112/e41084/sql_elements001.htm#SQLRF50992

你完全可以使用下面的逻辑来计算年份和月份。就天数而言——2月28日1个月回归3月31日有点棘手。。。

select extract(year from (d2 - d1) year to month), 
       extract(month from (d2 - d1) year to month),
       add_months(d1, extract(year from (d2 - d1) year to month)*12 + extract(month from (d2 - d1) year to month)) - d2 
from (
select date'2014-08-27' as d2, date'2002-02-27' as d1
  from dual
)  
 类似资料:
  • 本文向大家介绍php计算年龄精准到年月日,包括了php计算年龄精准到年月日的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了php计算年龄精准到年月日的方法。分享给大家供大家参考。具体如下: 希望本文所述对大家学习php程序设计有所帮助。

  • 这是我的代码,从这里采取:计算年龄在JavaScript 它如何继续与月和日,如: 用户生日是:2010/04/29 结果应该是这样的:2岁4个月5天。 演示:http://jsfiddle.net/jFxb5/

  • 问题内容: 我想计算两个日期之间的年数。 例如:- 这将导致335天。我想用几年来展示,这将是几年。 问题答案: 只需执行此操作(除以 365.242199 ): 1年= 365.242199天 或者 使用MONTHS_BETWEEN尝试类似的事情:- 或者您也可以尝试以下方法: 335 / 365.242199 = 0.917199603,而不是.97

  • 我想计算两个日期之间的时间跨度(注意:输入格式为dd.MM.yyyy,请参见下面的代码)。特别的是,我们不想每个月用30天,一年用360天。我更希望在“人类模式”上有所不同(不知道如何称呼它)。 比方说,我想计算从2014年10月1日到2015年3月17日的差异(包括最后一天)。从10月到2月是5个月。然后剩下的是18天(从第1天到17天,包括第17天)。所以结果应该是: 0年5个月18天 当然,

  • 键入结束年度:2013 2008年是闰年 2012年是闰年 非常感谢您的回复!帮助我学到了比我的讲师实际教的更多的东西:)

  • 我试图在我正在创建的C#应用程序中显示两个日期之间的年、月和日。(使用控制台进行测试) 我正在使用NodaTime来实现这一点,但在接下来的几个月里,我遇到了一些问题。 我已经阅读了这里的大部分问题和答案,但没有找到任何我可以从中受益的东西。 大多数时候函数工作但有时它不添加月如果天 我使用这个代码进行测试 (2017, 10, 16)和(2018, 1, 15)应该显示为3个月,但它们显示为2个