【问题标题】:DATE DIFF IN YEARS年份的日期差异
【发布时间】:2021-05-06 19:54:57
【问题描述】:

如何以'YYYY-MM-DD'格式查找日期差异。

我正在使用以下两个队列:

SELECT TRUNC(TO_NUMBER(SYSDATE - TO_DATE('1994-08-13')) / 365.25) AS AGE FROM DUAL;

ORA-01861: 文字与格式字符串不匹配

SELECT (TO_DATE(SYSDATE, 'YYYY-MM-DD') - TO_NUMBER('1994-08-13', 'YYYY-MM-DD')) FROM DUAL;

O/P-: -727738

所需的 o/p:26

【问题讨论】:

  • 试试SELECT TO_NUMBER(TO_CHAR(SYSDATE, 'YYYY')) FROM DUAL;
  • 这能回答你的问题吗? Oracle date difference to get number of years
  • @JohnMitchell- 谢谢,但我想要 yyyy-mm-dd 格式的两年之间的差异。
  • 从不,永远不要在已经是日期的值上调用 to_date()。这将首先将date 值转换为varchar,然后将varchar 转换回最初的date
  • 试试SELECT TO_NUMBER(TO_CHAR(SYSDATE, 'YYYY')) - TO_NUMBER(TO_CHAR(TO_DATE('1994-08-13', 'YYYY-MM-DD'), 'YYYY')) AS ANSWER FROM DUAL; 输出=27

标签: oracle datediff


【解决方案1】:

只需从另一个日期中减去一个日期:

sysdate - date '1994-08-13'

或者

sysdate - to_date('1994-08-13', 'yyyy-mm-dd')

返回两个日期之间的天数。

所以将你的第一个查询重写为:

select (sysdate - date '1994-08-13')  / 365.25 as age
from dual

【讨论】:

    【解决方案2】:

    因此,从这些日期中提取年并减去它们:

    SQL> select extract (year from sysdate) - extract(year from date '1994-08-13') diff
      2  from dual;
    
          DIFF
    ----------
            27
    
    SQL>
    

    因为,

    SQL> select 2021 - 1994 diff from dual;
    
          DIFF
    ----------
            27
    
    SQL>
    

    【讨论】:

      【解决方案3】:

      我建议使用“months_between”函数,因为它考虑了闰年(months_between 需要 2 个日期作为参数):

      select months_between(sysdate, to_date('1994-08-13', 'YYYY-MM-DD'))/12 from dual;
      
      26,4729751904122
      

      当然,如果你需要截断:

      select trunc(months_between(sysdate, to_date('1994-08-13', 'YYYY-MM-DD'))/12) from dual;
      
      26
      

      【讨论】:

      • 请原谅我的无知,但您能否向我解释一下您的答案与duplicate question 中接受的答案有何不同?
      • @Abra,对不起,我没有注意到你的评论;你可以想象,当有人看到许多他不满意的答案时,他很想发表意见,并且没有仔细看所有的cmets,但是写得这么小;下次我要多注意cmets了。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-03-12
      • 2020-09-20
      • 2011-05-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多