none
Fazer com Mysql RRS feed

  • Discussão Geral

  • Ola, preciso de ajuda de como fazer este Sql no mywsql.

    Esse Sql deve listar os meses entre duas datas, nao somente a quantidade, mas sim todos os meses.

    DECLARE DataInicial datetime;
    DECLARE DataFinal  datetime;

    SET DataInicial = '01/11/2013';
    SET DataFinal = '29/11/2013';

    with a as
    (
        select DataInicial as Data

        union all

        select DATEADD(DAY, 1, Data)
        from CTE
        where Data < DataFinal
    )

    select * from CTE;

    No aguardo,


    Hellmann's (Joviano Pott)

    • Movido Giovani Cr segunda-feira, 7 de outubro de 2013 17:57
    domingo, 29 de setembro de 2013 22:26

Todas as Respostas

  • Ola, consegui fazer o que queria, porem deu um pouco mais de trabalho que o simples sql acima.

    Mas se alguem tiver algo melhor e quiser compartilhar, fico feliz em ver.

    DELIMITER $$

    DROP PROCEDURE IF EXISTS `xxxx`.`SP_PERIODO_MESES` $$
    CREATE PROCEDURE `SP_PERIODO_MESES`(
    V_ID_SAFRA VARCHAR(255),
    V_DS_PERIODO DOUBLE)

    BEGIN

    DECLARE X INT DEFAULT 0;
    DECLARE Y INT DEFAULT 1;

    CREATE TEMPORARY TABLE tbl_periodo (
    DS_NOME_MES varchar(50)) ENGINE=MEMORY;

    IF V_DS_PERIODO = 2 THEN
      SET Y = (SELECT PERIOD_DIFF(EXTRACT(YEAR_MONTH FROM DS_PER_CIVIL_FIN), EXTRACT(YEAR_MONTH FROM DS_PER_CIVIL_INI))
              FROM tbl_safra WHERE ID_SAFRA = V_ID_SAFRA);
      SELECT DS_PER_CIVIL_INI INTO @DATA_INICIAL FROM tbl_safra WHERE ID_SAFRA = V_ID_SAFRA;
    ELSE
        SET Y = (SELECT PERIOD_DIFF(EXTRACT(YEAR_MONTH FROM DS_PER_SAFRA_FIN), EXTRACT(YEAR_MONTH FROM DS_PER_SAFRA_INI))
              FROM tbl_safra WHERE ID_SAFRA = V_ID_SAFRA);
      SELECT DS_PER_SAFRA_INI INTO @DATA_INICIAL FROM tbl_safra WHERE ID_SAFRA = V_ID_SAFRA;
    END IF;


    WHILE X <= Y DO

    INSERT INTO tbl_periodo
               (DS_NOME_MES)
    VALUES(
    PERIOD_ADD(EXTRACT(YEAR_MONTH FROM @DATA_INICIAL), X));

    SET X =X + 1;

    END WHILE;

    SELECT CONCAT(RIGHT(DS_NOME_MES,2),' - ', LEFT(DS_NOME_MES,4)) FROM tbl_periodo;

    END $$

    DELIMITER ;


    Hellmann's (Joviano Pott)

    domingo, 29 de setembro de 2013 23:59