2015-07-16 1 views
1

Lorsque j'essaie de compter des mois entre deux dates, je reçois le mauvais résultat.Comment compter les mois entre deux dates?

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; 

Je dois obtenir dans le premier code - 4
sur la seconde - 1
mais je n'ai pas compris.

+0

Qu'avez-vous alors? –

+0

je veux obtenir 4 et 1 – uriel

+0

10/2014, 11/2014, 12/2015, 01/2015 = 4 mois – uriel

Répondre

0

i get it finaly:

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

Essayez cette

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

j'ai 2 ... pas 4 – uriel

+0

Maintenant, vous pouvez vérifier ce –

0

Essayez ceci:

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

hey merci mais ce n'est pas ce dont j'ai besoin. 10/2014, 11/2014, 12/2015, 01/2015 = 4 mois – uriel

0

Essayez ceci:

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; 

Il retourne 4 et 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; 

Voir Fiddle