Tengo 2 fechas, decir 28-Mar-2011 y el 29-Jun-2011. Necesito una consulta sql que se muestran los meses entre estas 2 fechas, incluyendo los meses que contienen las fechas, es decir,. Junio, Mayo, abril y Marzo.

OriginalEl autor Nitish | 2011-08-03

6 Comentarios

  1. 17

    Algo como esto

    SQL> ed
    Wrote file afiedt.buf
    
        select to_char( add_months( start_date, level-1 ), 'fmMonth' )
          from (select date '2011-03-30' start_date,
                       date '2011-06-29' end_date
                  from dual)
         connect by level <= months_between(
                               trunc(end_date,'MM'),
                               trunc(start_date,'MM') )
      *                      + 1
    SQL> /
    
    TO_CHAR(ADD_MONTHS(START_DATE,LEVEL-
    ------------------------------------
    March
    April
    May
    June

    debería funcionar.

    Hola Justin, las grandes mentes piensan igual 😉
    +1. «por igual», pero el tuyo es – como se señaló – mejor. 😀
    Así, incluso un ciego ardilla encuentra ocasional de la tuerca.

    OriginalEl autor Justin Cave

  2. 1

    Puede utilizar la función MONTHS_BETWEEN

    SELECT MOD( TRUNC( MONTHS_BETWEEN( '2011-07-29', '2011-03-28' ) ), 12 ) as MONTHS
    FROM DUAL

    Salida

        MONTHS
    ----------
             4
    Necesito los meses como el de salida, es decir,. Marzo, abril, Mayo y junio. No 4.
    Lo siento, no he entendido tu pregunta. Usted debe comprobar Justin Cueva de la respuesta. Es correcto.

    OriginalEl autor bruno

  3. 1

    Yo necesitaba una respuesta a este un par de días atrás. He encontrado otra solución que más me ha gustado:

    select to_char(which_month, 'Mon-yyyy') month
    from
    (
        select
            add_months(to_date(:start_date,'mm-yyyy'), rownum-1) which_month
        from
            all_objects
        where
            rownum <= months_between(to_date(:end_date,'mm-yyyy'), add_months(to_date(:start_date,'mm-yyyy'), -1))
        order by
            which_month
    )

    Usted podría, por supuesto, el uso de cualquier formato que usted desee. Yo sindicato de ed y resumida sobre otro conjunto de lo que me gustaría conseguir los meses, incluso cuando ellos no tienen resultados.

    Apreciado, la respuesta exacta a lo que yo quiero 🙂

    OriginalEl autor Rubenisme

  4. 1

    Va a agregar esta solución sólo porque creo que es mucho más limpio que los otros:

    SELECT ADD_MONTHS(TRUNC(TO_DATE('28-Mar-2011', 'DD-MON-YYYY'), 'MON'), ROWNUM - 1) date_out
    FROM   DUAL
    CONNECT BY ADD_MONTHS(TRUNC(TO_DATE('28-Mar-2011', 'DD-MON-YYYY'), 'MON'), ROWNUM - 1)
        <= TRUNC(TO_DATE('29-Jun-2011', 'DD-MON-YYYY'), 'MON')

    OriginalEl autor Reimius

  5. 0
    SELECT MIN (to_date((TO_CHAR (Actual_Date, 'DD-MM-RRRR')),'dd-mm-rrrr')) F_DATE,
             MAX (to_date((TO_CHAR (Actual_Date, 'DD-MM-RRRR')),'dd-mm-rrrr')) T_DATE,
             TO_CHAR (Actual_Date, 'MM-RRRR') TRX_MONTH     
        FROM (    SELECT TRUNC (TO_DATE (:P_FDATE, 'dd-mm-rrrr')) + LEVEL - 1
                            Actual_Date
                    FROM (SELECT TRUNC (TO_DATE (:P_FDATE, 'dd-mm-rrrr'), 'MM') - 1
                                    AS dt
                            FROM DUAL)
              CONNECT BY LEVEL <=
                            (  TO_DATE (:P_TDATE, 'dd-mm-rrrr')
                             - TRUNC (TO_DATE (:P_FDATE, 'dd-mm-rrrr'))
                             + 1))
    GROUP BY TO_CHAR (Actual_Date, 'MM-RRRR')
    ORDER BY 1
    Por favor aplicar sangría al código de 4 espacios para activar el resaltado de sintaxis. Además, la adición de un poco de texto que explica suele ser apreciado (sobre todo si no se aceptan respuestas ya, digan lo que su solución tiene diferentes).

    OriginalEl autor Ahmed Elshayeb

  6. 0
         declare 
            v_date_from_first_day date;
            v_date_to_last_day date;
            v_month_name varchar2(10);
            v_month_number number;
            v_year_number number;
            v_month_diff number;
            begin
              v_date_to_last_day := to_date('31.12.2018'); 
              v_date_from_first_day := to_date('01.01.2018');
    
              select months_between(v_date_to_last_day,v_date_from_first_day) as diff into v_month_diff from dual;
    
              for i in 1..round(v_month_diff, 2) loop
              select 
              to_char(trunc(add_months(v_date_to_last_day - months_between(v_date_from_first_day, v_date_to_last_day), -i)), 'fmMonth') as month_nm,
              to_char(trunc(add_months(v_date_to_last_day - months_between(v_date_from_first_day, v_date_to_last_day), -i)), 'MM') as month_num,
              to_char(trunc(add_months(v_date_to_last_day - months_between(v_date_from_first_day, v_date_to_last_day), -i)), 'YYYY') as year_num
              into v_month_name, v_month_number, v_year_number
              from dual;
    
              dbms_output.put_line(v_month_number || '/' || v_year_number);
    dbms_output.put_line(v_month_name || '/' || v_year_number);
              end loop;
            end;
    
            Output: 
            12/2018
            11/2018
            10/2018
            9/2018
            8/2018
            7/2018
            6/2018
            5/2018
            4/2018
            3/2018
            2/2018
            1/2018

    Aquí, los nombres de los meses son en croata

    Prosinac/2018
    Studeni/2018
    Listopad/2018
    Rujan/2018
    Kolovoz/2018
    Srpanj/2018
    Lipanj/2018
    Svibanj/2018
    Travanj/2018
    Ožujak/2018
    Veljača/2018
    Siječanj/2018
    Hola y bienvenidos, por favor lee la guía de la Cómo Responder. También puede documentar su Codesample un poco mejor para ayudar a la gente a entender lo que hace.
    Lo siento. Mi primera vez aquí. Me va a hacer mejor en el futuro.
    no importa 🙂 Sólo asegúrese de corregir, para hacer que sea lo más útil posible para cualquier persona a la lectura.

    OriginalEl autor Bruno Blaugrana Kucevic

Dejar respuesta

Please enter your comment!
Please enter your name here