首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Oracle日期差异以获取年数

Oracle日期差异以获取年数
EN

Stack Overflow用户
提问于 2011-10-30 11:02:53
回答 5查看 152.1K关注 0票数 37

有没有办法计算日期之间的年数。不确定如何做到这一点,同时考虑到leap和什么不是。是否可以在SELECT语句中执行IF语句?

谢谢

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-10-30 13:16:46

我会使用months_between,可能会与floor结合使用

代码语言:javascript
复制
select floor(months_between(date '2012-10-10', date '2011-10-10') /12) from dual;

select floor(months_between(date '2012-10-9' , date '2011-10-10') /12) from dual;

floor会确保你得到四舍五入的年份。如果你想要小数部分,你显然不想使用floor

票数 61
EN

Stack Overflow用户

发布于 2011-10-30 12:11:57

如果你只是想要年份的差异,有以下几点:

代码语言:javascript
复制
SELECT EXTRACT(YEAR FROM date1) - EXTRACT(YEAR FROM date2) FROM mytable

或者你也想要小数年?

代码语言:javascript
复制
SELECT (date1 - date2) / 365.242199 FROM mytable

根据谷歌的说法,365.242199是以天计算的一年。

票数 21
EN

Stack Overflow用户

发布于 2015-10-12 16:18:00

我必须实现一个year diff函数,它的工作方式类似于sybase datediff。在这种情况下,将计算实际年份差异,而不是四舍五入的日期差异。因此,如果有两个日期相隔一天,则年份差异可以是1(请参阅select datediff(year, '20141231', '20150101'))。

如果必须以这种方式计算年份差异,则使用:

代码语言:javascript
复制
EXTRACT(YEAR FROM date_to) - EXTRACT(YEAR FROM date_from)

对于日志,(几乎)完整的datediff函数:

代码语言:javascript
复制
CREATE OR REPLACE FUNCTION datediff (datepart IN VARCHAR2, date_from IN DATE, date_to IN DATE)
RETURN NUMBER
AS
  diff NUMBER;
BEGIN
  diff :=  CASE datepart
    WHEN 'day'   THEN TRUNC(date_to,'DD') - TRUNC(date_from, 'DD')
    WHEN 'week'  THEN (TRUNC(date_to,'DAY') - TRUNC(date_from, 'DAY')) / 7
    WHEN 'month' THEN MONTHS_BETWEEN(TRUNC(date_to, 'MONTH'), TRUNC(date_from, 'MONTH'))
    WHEN 'year'  THEN EXTRACT(YEAR FROM date_to) - EXTRACT(YEAR FROM date_from)
  END;
  RETURN diff;
END;";
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7943055

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档