10 Replies Latest reply: Dec 11, 2015 1:51 PM by Ricardo Azevedo RSS

    Datas em consultas SQL

    Ricardo Azevedo

      Meus caros, tenho encontrado muitas dificuldades em trabalhar com datas de dados de importo através de consulta SQL no meu banco de dados oracle.

       

      Os campos de data no meu banco de dados são do tipo Char(8) e para transforma-los em data utilizo no SQL TO_DATE(RD_DATPGT,'YYYY-MM-DD').


      Para trazer o campo mês e o campo ano utilizo o seguinte:

       

             , TO_NUMBER(TO_CHAR(TO_DATE(RD_DATPGT,'yyyy-mm-dd'),'yyyy')) ANO

             , TO_CHAR(TO_DATE(RD_DATPGT,'yyyy-mm-dd'),'MON') MES_EXTENSO


      Ocorre que, por exemplo, caso eu tenha o MES_EXTENSO selecionado NOV e eu faça dentro do Qlik  =MES_EXTENSO-1

        deveria me retornar OUT porém ele me retorna -.

       

      Podem me ajudar nisso ?

       

      Grande abraço

        • Re: Datas em consultas SQL
          Yuri Nicolett

          Isso é porque o QlikView não esta interpretando esse campo como uma data e sim como texto.

           

          Para tratar o campo para data, você deve utilizar a função Date#() passando o mesmo formato do campo, por exemplo: Se seu campo de Mês possui o conteúdo 'MMM', então use Date#(CAMPO, 'MMM') para ele transformar esse campo em uma data.

            • Re: Datas em consultas SQL
              Ricardo Azevedo

              Yuri, obrigado pela resposta.

              Fiz desta forma  =Date#(MES_EXTENSO, 'MMM')-1  e me retornou   -60.

              Fiz algo errado ?


                • Re: Datas em consultas SQL
                  Yuri Nicolett

                  Tente dessa forma:

                   

                  Month(Num(Date#(MES, 'MMM'))) as MES_FMT

                   

                  Veja a app em anexo

                    • Re: Datas em consultas SQL
                      Ricardo Azevedo

                      Mas Yuri, como posso colocar isso dentro do meu script SQL?

                      Veja meu script abaixo:

                       

                       

                      ODBC CONNECT32 TO [Protheus;DBQ=totvsp11] (XUserId is xxx, XPassword is xxx);

                      SELECT   TO_DATE(RD_DATPGT,'YYYY-MM-DD') DATA
                      , TO_NUMBER(TO_CHAR(TO_DATE(RD_DATPGT,'yyyy-mm-dd'),'yyyy')) ANO
                      , TO_CHAR(TO_DATE(RD_DATPGT,'yyyy-mm-dd'),'MON') MES_EXTENSO
                      , RD_MES MES
                      , RA_CRACHA Crachá
                      , RA_MAT MATRÍCULA 
                      , RA_NOME Nome
                      , RJ_DESC Função
                      , RA_CC CENTRO_DE_CUSTO
                      , CTT_DESC01 DESC_CC
                      , CTT_RESP RESPONSÁVEL
                      , RD_CC CC_ANTERIOR
                      , RD_PD VERBA
                      , CASE RV_TIPOCOD
                      WHEN '1' THEN 'Proventos'
                      WHEN '2' THEN 'Descontos'
                      WHEN '3' THEN 'Base' end as TIPO
                      , RV_DESC DESCRICAO
                      , RD_VALOR
                       
                      , CTT_RNOME GERENTE
                       
                      , CTT_NGEST SUB_AREA


                      FROM P11PRD.SRA010
                      LEFT JOIN P11PRD.SRJ010
                      ON P11PRD.SRJ010.RJ_FUNCAO=P11PRD.SRA010.RA_CODFUNC

                      LEFT JOIN P11PRD.CTT010
                      ON CTT_CUSTO=RA_CC

                      LEFT JOIN P11PRD.SRD010
                      ON RD_MAT=RA_MAT

                      LEFT JOIN P11PRD.SRV010
                      ON P11PRD.SRV010.RV_COD=P11PRD.SRD010.RD_PD

                      WHERE P11PRD.SRA010.D_E_L_E_T_<>'*'
                      AND P11PRD.SRV010.D_E_L_E_T_<>'*'
                      AND P11PRD.SRJ010.D_E_L_E_T_<>'*'
                      AND P11PRD.CTT010.D_E_L_E_T_<>'*'
                      AND P11PRD.SRD010.D_E_L_E_T_<>'*'
                      AND P11PRD.SRJ010.RJ_FILIAL='0102'
                      AND P11PRD.CTT010.CTT_FILIAL='0102'
                      AND P11PRD.SRD010.RD_FILIAL='0102'
                      AND P11PRD.SRV010.RV_FILIAL='0102'
                      AND P11PRD.SRD010.RD_DATPGT>='20140101'

                      ORDER BY RD_DATPGT;

                • Re: Datas em consultas SQL
                  maicon mello

                  Ricardo, teria que usar algo nesse sentido :

                   

                  month(addmonths(today(),-1))

                   

                  no seu caso month(addmonths(MES_EXTENSO,-1))

                   

                   

                  Atenciosamente

                  Maicon Mello

                  • Re: Datas em consultas SQL
                    Daniel Vale

                    Olha,

                     

                    vc pode trazer o campo normal do banco de dados e fazer da seguinte forma dentro do tratamento:

                     

                    Date(CAMPO) as DataCampo,

                    Month(CAMPO) as MesCampo

                     

                    acho que assim não vai ter problemas e pode usar tb:

                     

                    sum({$<MesCampo={$(MesCampo)-1)}>} VALOR)