Pular para o conteúdo
  • Este tópico contém 2 respostas, 3 vozes e foi atualizado pela última vez 15 anos, 1 mês atrás por Avatar photoRegis Araujo.
Visualizando 3 posts - 1 até 3 (de 3 do total)
  • Autor
    Posts
  • #96672
    elciodba
    Participante

      Pessoal, estou com problema no ADD_MONTHS, quando executo o select abaixo
      SELECT TO_CHAR(ADD_MONTHS(’30/06/2010′,37),’DD/mm/yyyy’) FROM dual
      Ele retorna : 31/07/2013
      o certo seria 30/06/2013
      Alguem ja passou por isso ?
      Versão do Banco : 1 Oracle Database 10g Release 10.2.0.4.0 – Production2 PL/SQL Release 10.2.0.4.0 – Production3 CORE 10.2.0.4.0 Production4 TNS for 32-bit Windows: Version 10.2.0.4.0 – Production5 NLSRTL Version 10.2.0.4.0 – Production
      Obrigado

      Elcio Francisco
      Analista de Sistemas MulticréditoBelo Horizonte – MG

      #96673
      burga
      Participante

        Oi Elcio,

        Considerando que você espera que retorne 30/07/2013 e não do 06 como você postou. Acredito que a resposta esteja certa, visto a nota da documentação abaixo:

        End of Month

        When the day component of start_datetime is the last day of the month or when the returned month has fewer days, then the returned day component is the last day of the month. Otherwise, the day component of the returned date is the same as the day component of start_datetime.

        http://download.oracle.com/docs/cd/B12037_01/olap.101/b10339/x_abs012.htm

        Portanto não é bug de versão nem nada, somente a forma como a função add_months está implementada. Se você não quer que isto aconteça, não utilize a função pra estes casos.

        #96674
        Avatar photoRegis Araujo
        Participante

          Ola Elcio, boa tarde..!

          Seguinte.. 30/06/2010 + 37 meses = 31/07/2013 e não 30/06/2013..!!

          O ADD_MONTHS adiciona meses ao mês existente.. ele não conta o mês vigente.. ele inicia a partir do próximo mês..!!

          Vamos as contas..!!

          30/06/10 + 6 meses = 31/12/10

          31/12/10 + 12 meses = 31/12/11

          31/12/11 + 12 meses = 31/12/12

          31/12/12 + 7 meses = 31/07/13

          Totalizando 37 Meses..

          Abraços..!

        Visualizando 3 posts - 1 até 3 (de 3 do total)
        • Você deve fazer login para responder a este tópico.