【问题标题】:Oracle correctly getting the month differenceOracle 正确获取月差
【发布时间】:2013-03-22 22:29:23
【问题描述】:

您好,我在获取与当月不包括日期的日期的正确差异时遇到了问题。

即如果查询运行的月份是 2013 年 3 月

那么结果应该如下

EXECUTION_DATE,EXEC_DIFF 13 年 1 月 1 日至 2 月 1 日 2013 年 1 月 31 日,2 2013 年 1 月 30 日,2

但是使用下面的 sql 语句我得到了

EXECUTION_DATE,EXEC_DIFF 13 年 1 月 1 日至 2 月 1 日 2013 年 1 月 31 日,2 13 年 1 月 30 日,1
select EXECUTION_DATE,
       floor(MONTHS_BETWEEN (trunc(sysdate,'MM')-1, EXECUTION_DATE))+1 "EXEC_DIFF"
from V_CERT_LIST  
WHERE EXECUTION_DATE < TO_DATE('02/02/2013','DD/MM/YYYY') 
ORDER BY EXECUTION_DATE DESC

有人能帮我纠正一下吗,我已经用这个头疼了一段时间了

谢谢

【问题讨论】:

    标签: sql oracle oracle11g


    【解决方案1】:
    select EXECUTION_DATE,
           MONTHS_BETWEEN (trunc(sysdate,'MM'), trunc(EXECUTION_DATE,'MM')) "EXEC_DIFF"
    from V_CERT_LIST  
    WHERE EXECUTION_DATE < TO_DATE('02/02/2013','DD/MM/YYYY') 
    ORDER BY EXECUTION_DATE DESC
    

    【讨论】:

      【解决方案2】:

      不寻找分数但无法理解months_between有什么问题?据我了解,当月执行时间无关紧要 - 1 月 31 日或 1 月 30 日......如您的示例所示,1 月和 3 月之间的差异仍然是 2 个月。我可以在查询中添加更多天数,但 mo_betw。还是一样...:

      SELECT to_char(exec_date, 'DD-MON-YYYY') exec_date, MONTHS_BETWEEN(run_date, exec_date) months_btwn
       FROM
       (
       SELECT to_date('01/03/2013', 'DD/MM/YYYY') run_date
           , Add_Months(Trunc(sysdate,'YEAR'),Level-1) exec_date -- first day of each month
         FROM dual
       CONNECT BY LEVEL <= 3
       )
      /
      
      
      EXEC_DATE   MONTHS_BTWN
      ------------------------
       01-JAN-2013    2
       01-FEB-2013    1
       01-MAR-2013    0
      

      【讨论】:

        【解决方案3】:

        Months_Between 具有复杂的逻辑,需要考虑月份中的哪一天。

        也许你想要的是这样的:

        select EXECUTION_DATE,
               ((year(sysdate)*12+month(sysdate)) - (year(execution_date)*12 + month(execution_date))
               ) as Exec_Diff
        from V_CERT_LIST  
        WHERE EXECUTION_DATE < TO_DATE('02/02/2013','DD/MM/YYYY') 
        ORDER BY EXECUTION_DATE DESC
        

        这会将年/月组合转换为自 0 时间以来的月数,然后减去结果。

        【讨论】:

          猜你喜欢
          • 2014-01-15
          • 2020-09-22
          • 1970-01-01
          • 1970-01-01
          • 2012-12-29
          • 1970-01-01
          • 1970-01-01
          • 2012-12-06
          • 2020-08-09
          相关资源
          最近更新 更多