如何获取Oracle 11g中两个日期之间的天数?

Bri*_*say 31 sql oracle oracle11g

我试图在Oracle 11g中找到两个日期之间的整数天数.

我可以靠近做

select sysdate - to_date('2009-10-01', 'yyyy-mm-dd') from dual
Run Code Online (Sandbox Code Playgroud)

但这会返回一个间隔,而我还没有成功将其转换为整数.

编辑:显然在10g中,这将以整数形式返回天数.

Ton*_*ews 42

或者你可以做到这一点:

select trunc(sysdate) - to_date('2009-10-01', 'yyyy-mm-dd') from dual
Run Code Online (Sandbox Code Playgroud)

这将返回一整天的NUMBER个:

SQL> create view v as 
  2  select trunc(sysdate) - to_date('2009-10-01', 'yyyy-mm-dd') diff 
  3  from dual;

View created.

SQL> select * from v;

      DIFF
----------
        29

SQL> desc v
 Name                   Null?    Type
 ---------------------- -------- ------------------------
 DIFF                            NUMBER(38)
Run Code Online (Sandbox Code Playgroud)

  • 这仍然返回 INTERVAL DAY TO SECOND (3认同)

Bri*_*say 16

我自己想通了.我需要

select extract(day from sysdate - to_date('2009-10-01', 'yyyy-mm-dd')) from dual
Run Code Online (Sandbox Code Playgroud)

  • 奇怪的.与其他回答者一样,当我执行您的原始查询时,我得到一个数字,而不是间隔.当我尝试你的解决方案时,我收到一个错误,ORA-30076:提取源的无效提取字段.这是在Oracle 10g中; 你用的是什么版本? (6认同)
  • select extract(day from sysdate - cast(date '2009-10-01' as timestamp)) from dual (2认同)
  • 我认为@Tony Andrews 更好地回答了这个问题。 (2认同)

Sab*_*lik 5

您可以尝试使用:

select trunc(sysdate - to_date('2009-10-01', 'yyyy-mm-dd')) as days from dual
Run Code Online (Sandbox Code Playgroud)