Skip to main content
Announcements
Join us at Qlik Connect for 3 magical days of learning, networking,and inspiration! REGISTER TODAY and save!
cancel
Showing results for 
Search instead for 
Did you mean: 
Anonymous
Not applicable

Datas em consultas SQL

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

Labels (2)
1 Solution

Accepted Solutions
nicolett_yuri

Faça assim:

LOAD

  *,

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

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á

.......

.....

....

....

View solution in original post

10 Replies
nicolett_yuri

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.

maiconmello
Creator III
Creator III

Ricardo, teria que usar algo nesse sentido :

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

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

Atenciosamente

Maicon Mello

daniel_vale
Creator
Creator

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)

Anonymous
Not applicable
Author

Yuri, obrigado pela resposta.

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

Fiz algo errado ?


Anonymous
Not applicable
Author

Maicon, obrigado pela resposta.

Fiz como orientou mas retornou -

nicolett_yuri

Tente dessa forma:

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

Veja a app em anexo

Anonymous
Not applicable
Author

Daniel, como posso "criar" este campo dentro do script? Já tentei colocar assim dentro do código SQL mas não funciona.

Ou você está me dizendo para utilizar dentro da expressão ?

Anonymous
Not applicable
Author

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;

nicolett_yuri

Faça assim:

LOAD

  *,

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

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á

.......

.....

....

....