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

Sql 如何在Oracle 11g中获取两个日期之间的天数?,sql,oracle,oracle11g,Sql,Oracle,Oracle11g,我试图在Oracle11g中找到两个日期之间的整数天数 我可以通过这样做来接近你 select sysdate - to_date('2009-10-01', 'yyyy-mm-dd') from dual 但这会返回一个间隔,我还没有成功地将其转换为整数 编辑:显然,在10g中,它以整数形式返回天数。我自己计算出来的。我需要 select extract(day from sysdate - to_date('2009-10-01', 'yyyy-mm-dd')) from dual 您可

我试图在Oracle11g中找到两个日期之间的整数天数

我可以通过这样做来接近你

select sysdate - to_date('2009-10-01', 'yyyy-mm-dd') from dual
但这会返回一个间隔,我还没有成功地将其转换为整数


编辑:显然,在10g中,它以整数形式返回天数。

我自己计算出来的。我需要

select extract(day from sysdate - to_date('2009-10-01', 'yyyy-mm-dd')) from dual
您可以尝试使用:

select trunc(sysdate - to_date('2009-10-01', 'yyyy-mm-dd')) as days from dual

或者你也可以这样做:

select trunc(sysdate) - to_date('2009-10-01', 'yyyy-mm-dd') from dual
这将返回完整天数:

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)

这将起作用,我已经对自己进行了测试。
它给出了sysdate和从列admitdate获取的日期之间的差异

  TABLE SCHEMA:
    CREATE TABLE "ADMIN"."DUESTESTING" 
    (   
  "TOTAL" NUMBER(*,0), 
"DUES" NUMBER(*,0), 
"ADMITDATE" TIMESTAMP (6), 
"DISCHARGEDATE" TIMESTAMP (6)
    )

EXAMPLE:
select TO_NUMBER(trunc(sysdate) - to_date(to_char(admitdate, 'yyyy-mm-dd'),'yyyy-mm-dd')) from admin.duestesting where total=300
  • 从月底到今天开始的完整天数,包括月的最后一天:

    SELECT LAST_DAY (TRUNC(SysDate)) - TRUNC(SysDate) + 1 FROM dual
    
  • 使用精确时间之间的天数:

    SELECT SysDate - TO_DATE('2018-01-01','YYYY-MM-DD') FROM dual
    

SQL应该返回一个数字值,而不是间隔10年以上的可能重复值-这说明了从日期(如SYSDATE)减去日期和从时间戳(如SYSTIMESTAMP)减去日期之间的区别。前者生成一个表示两个日期之间天数的数字,而后者生成两个日期之间天数的间隔表示。实际上,在计算中的任何位置引入时间戳都会导致返回一个间隔,因此OP重新定义SYSDATE.trunc()可能对我不起作用。我得到了这个错误:不一致的数据类型:预期的数字,得到的间隔天秒哦,是的。。因为你在第二次约会中没有HH24:MI:SS部分。。很高兴你弄明白了,如果这仍然返回一个间隔日到秒不,它没有,你为什么这么说?证明它返回一个数字,而不是间隔日到秒添加到答案中。奇怪。和其他回答者一样,当我进行最初的查询时,我得到的是一个数字,而不是一个间隔。当我尝试您的解决方案时,我得到一个错误,ORA-30076:提取源的提取字段无效。这是在Oracle 10g中;您使用的是什么版本?11g。可能就是这样。谢谢Dave。使用systimestamp而不是sysdate意味着它使用时间戳而不是日期算术,这会给出时间间隔。但是我无法重现你对sysdate的体验。从dualI中选择摘录(sysdate-cast中的日期(日期'2009-10-01'作为时间戳))我认为@Tony Andrews更好地回答了这个问题。