gpt4 book ai didi

sql - 如何在 Oracle 中获取两个日期之间的差异并将其显示为 ' x years y month z days'

转载 作者:行者123 更新时间:2023-12-05 00:41:32 25 4
gpt4 key购买 nike

我需要计算Oracle sql中两个日期之间的差异,并以如下格式显示:'x年y月z天'。

现在我看到了两种方法来实现这一点:

第一种方法是获取天数的差异,然后将其带到'x年y月z天'

第二种方法是用提取函数提取年月日。

在第一种和第二种情况下,我发现如何处理闰年和 30 天与 31 天的月差问题。

还有其他更简单的方法来实现吗?

最佳答案

作为另一种选择,您可以使用 the months_between() function , 并把给你的值分成三个部分。例如,有一些示例日期:

select months_between(date '2015-03-19', date '2012-01-06') as month_diff
from dual;

MONTH_DIFF
----------
38.4193548

整个月数可以拆分为十二的三个倍数(即年),剩下两个;小数部分是部分月份中的天数,基于 31 天的月份。

所以你可以提取部分:

with t (start_date, end_date) as (
select date '2012-01-06', date '2015-03-19' from dual
)
select start_date, end_date,
trunc(month_diff/12) as year_diff,
trunc(mod(month_diff, 12)) as month_diff,
31*(month_diff - trunc(month_diff)) as day_diff
from (
select start_date, end_date,
months_between(end_date, start_date) as month_diff
from t
);

START_DATE END_DATE YEAR_DIFF MONTH_DIFF DAY_DIFF
---------- ---------- ---------- ---------- ----------
2012-01-06 2015-03-19 3 2 13

然后你可以使用字符串连接来设置你想要的格式,例如

select trunc(month_diff/12) || ' years '
|| trunc(mod(month_diff, 12)) || ' months '
|| 31*(month_diff - trunc(month_diff)) || ' days' as diff
from (
...

DIFF
------------------------
3 years 2 months 13 days

关于sql - 如何在 Oracle 中获取两个日期之间的差异并将其显示为 ' x years y month z days',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29149219/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com