我正在开发一个程序,它采用开始日期和结束日期,并返回年,月和日的单独值。每个类别都有自己的代码部分,这是我一直在使用的,到目前为止它一直是半精确的,直到几天(有时几个月。我甚至不想在这一点上愚弄傻瓜)
Ex开始:04/10/2000结束:04/10/2006应该给我6年0个月0天。
年代码:
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
感谢您的时间,因为您想知道这是一份工作经验计算器:)
答案 0 :(得分:0)
请参考以下示例: 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
)