43

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

我可以通过这样做来接近

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

但这会返回一个间隔,我还没有成功地将它转换为整数。

编辑:显然在 10g 中,这会将天数作为整数返回。

4

6 回答 6

50

或者你可以这样做:

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

这将返回 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)
于 2009-10-29T19:34:51.983 回答
23

我自己想通了。我需要

select extract(day from sysdate - to_date('2009-10-01', 'yyyy-mm-dd')) from dual
于 2009-10-29T19:32:34.663 回答
6

您可以尝试使用:

select trunc(sysdate - to_date('2009-10-01', 'yyyy-mm-dd')) as days from dual
于 2009-10-29T19:33:41.010 回答
1

这将工作我已经测试过自己。
它给出了从列 admissiondate 获取的 sysdate 和日期之间的差异

  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
于 2013-01-02T12:05:29.133 回答
1
  • 从月底到今天开始的全天,包括当月的最后一天:

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

    SELECT SysDate - TO_DATE('2018-01-01','YYYY-MM-DD') FROM dual
    
于 2018-06-26T23:46:15.263 回答
0

请参阅以下查询以获得您的答案。我在第二部分选择了一个虚拟日期。您可以根据您的要求将其替换为任何日期。

SELECT TO_DATE(SysDate,'YYYY-MM-DD')  - TO_DATE('2018-01-01','YYYY-MM-DD') FROM dual
于 2021-12-17T12:45:37.090 回答