【问题标题】:How to count months between two date?如何计算两个日期之间的月份?
【发布时间】:2023-04-06 08:10:01
【问题描述】:

当我尝试计算两个日期之间的月份时,我得到了错误的结果。

SELECT ROUND(MONTHS_BETWEEN(TO_DATE('23/01/2015','dd/mm/yyyy'),
       TO_DATE('26/10/2014','dd/mm/yyyy')))  
FROM dual;


SELECT ROUND(MONTHS_BETWEEN(TO_DATE('25/05/2015','dd/mm/yyyy'), 
       TO_DATE('05/05/2015','dd/mm/yyyy'))) 
FROM dual;

我必须输入第一个代码 - 4
在第二个 - 1
但我没听懂。

【问题讨论】:

  • 那你得到了什么?
  • 我想要 4 和 1
  • 10/2014, 11/2014, 12/2015 , 01/2015 = 4 个月
  • 这个问题和你的差不多,可能对你有帮助:[stackoverflow.com/questions/6926923/…[1]:stackoverflow.com/questions/6926923/…
  • 你还没有真正解释这里的逻辑——我们只能猜测你的意思。你的意思是想知道有多少个日历月,包括第一个日期的月份和最后一个日期的月份?

标签: sql oracle date


【解决方案1】:

试试这个

select       
  trunc( months_between(TO_DATE('2015/01/23','yyyy/mm/dd'),
       TO_DATE('2014/10/26','yyyy/mm/dd')) ) mths    
FROM dual;

【讨论】:

  • 现在你可以检查了
【解决方案2】:

试试这个:

SELECT round(MONTHS_BETWEEN(TO_DATE('26/10/2014','dd/mm/yyyy'),TO_DATE('23/01/2015','dd/mm/yyyy')
       ))  
FROM dual;
 -3 
10/2014 to 11/2014 -- 1
11/2014 to 12/2015 -- 1
12/2015 to 01/2015 -- 1
so its 3. 
SELECT ROUND(MONTHS_BETWEEN(TO_DATE('05/05/2015','dd/mm/yyyy'),TO_DATE('25/05/2015','dd/mm/yyyy') 
       )) 
FROM dual;
-1

【讨论】:

  • 嘿,谢谢,但这不是我需要的。 10/2014, 11/2014, 12/2015 , 01/2015 = 4 个月
【解决方案3】:

试试这个:

select
ceil(months_between(add_months(
      trunc(to_date('23/01/2015','dd/mm/yyyy'),'MM'),1)-1, --last day of  month
      trunc(to_date('26/10/2014','dd/mm/yyyy'),'MM')) --first_day of month
    ) months_between
    from dual;


select
      ceil(months_between(add_months(
            trunc(to_date('25/05/2015','dd/mm/yyyy'),'MM'),1)-1, --last day of  month
            trunc(to_date('05/05/2015','dd/mm/yyyy'),'MM'))--first_day of month
            ) months_between
from dual;

它返回 4 和 1。 SQL Fiddle

【讨论】:

    【解决方案4】:

    我终于明白了:

    SELECT TRUNC(ROUND(MONTHS_BETWEEN(TRUNC(TO_DATE('23/01/2015','dd/mm/yyyy'),'mm'),TRUNC(TO_DATE('15/01/2015','dd/mm/yyyy'),'mm')))) + 1 FROM dual ;
    

    【讨论】:

      【解决方案5】:
      SELECT
        MONTHS_BETWEEN(LAST_DAY(DATE '2015-01-23')+1,     -- 1st of next month
                          TRUNC(DATE'2014-10-26', 'mon')) -- 1st of month
       ,MONTHS_BETWEEN(LAST_DAY(DATE '2015-05-25')+1, 
                          TRUNC(DATE'2015-05-05', 'mon'))
      FROM DUAL;
      

      Fiddle

      【讨论】:

        猜你喜欢
        • 2022-11-18
        • 1970-01-01
        • 1970-01-01
        • 2017-12-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多