【问题标题】:How to extract No. of Days between 2 dates in oracle sql?如何在 oracle sql 中提取两个日期之间的天数?
【发布时间】:2025-12-29 20:00:12
【问题描述】:

我想要使用 Oracle SQL 的这两个日期之间的天数

日期:

BETWEEN "1/1/2018" AND "6/11/2018"

如何编写 SQL 查询?

【问题讨论】:

  • 您想要计算开始日期和结束日期之间的天数吗?你想要这两个界限之间的所有天的列表吗?是否要过滤表以仅获取在这些日期之间有一列的行?

标签: sql oracle oracle10g


【解决方案1】:
between date '2018-01-01' and date '2018-11-06'

其中 DATE 文字看起来完全一样:DATE 'YYYY-MM-DD'

在你的例子中:

  • 不能使用双引号
  • 即使您使用单引号,这也是一个字符串,而不是 DATE,因此您将取决于 Oracle 是否能够(隐式)将其转换为日期
  • 因此,请始终使用日期,而不是字符串

[编辑]

这是您在这两个日期之间选择整个日历的方式:

select date '2018-01-01' + level - 1
from dual
connect by level <= date '2018-11-06' - date '2018-01-01' + 1;

【讨论】:

  • 确定如何从这些日期中提取天数
  • 啊!抱歉,我以为有一张包含一些日期的表格。好的,你需要创建一个日历 - 我编辑了我的消息,看看。
【解决方案2】:

正如其他答案指出的那样,您可以简单地将两个日期相除,但也不需要任何额外的算术。

代码:

select to_date('6/11/2018', 'DD/MM/YYYY') - to_date('1/1/2018', 'DD/MM/YYYY')
  from dual;

结果:309

【讨论】:

    【解决方案3】:

    你可以做的很简单:

    select date1-date2 form dual;
    

    select (sysdate-to_date('01-jan-2018'))-(sysdate-to_date('10-jan-2018'))from dual;
    

    【讨论】:

      【解决方案4】:

      随便用

      select date'2018-11-06' - date'2018-01-01' + 1 as days_difference
        from dual;
      
      DAYS_DIFFERENCE
      ---------------
           310
      

      with t( myDate ) as
      (
       select date'2018-11-06' from dual union all 
       select date'2018-01-01' from dual
      )
      select max(myDate) - min(myDate) + 1 as days_difference
        from t;
      
      DAYS_DIFFERENCE
      ---------------
           310
      

      【讨论】:

        最近更新 更多