2015-07-16 3 views
1

Когда я пытаюсь подсчитать месяцы между двумя датами, я получаю неправильный результат.Как подсчитать месяцы между двумя датами?

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
, но я не понял.

+0

что вы получите то? –

+0

я хочу, чтобы получить 4 и 1 – uriel

+0

10/2014, 11/2014, 12/2015, 01/2015 = 4 месяца – uriel

ответ

0

, наконец я понял:

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 ; 
0

Попробуйте

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

У меня 2 ... нет 4 – uriel

+0

Теперь вы можете проверить это –

0

Попробуйте это:

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 
+0

эй спасибо, но это не то, что мне нужно. 10/2014, 11/2014, 12/2015, 01/2015 = 4 месяца – uriel

0

Попробуйте это:

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

0
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