Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
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
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á
.......
.....
....
....
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.
Ricardo, teria que usar algo nesse sentido :
month(addmonths(today(),-1))
no seu caso month(addmonths(MES_EXTENSO,-1))
Atenciosamente
Maicon Mello
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)
Yuri, obrigado pela resposta.
Fiz desta forma =Date#(MES_EXTENSO, 'MMM')-1 e me retornou -60.
Fiz algo errado ?
Maicon, obrigado pela resposta.
Fiz como orientou mas retornou -
Tente dessa forma:
Month(Num(Date#(MES, 'MMM'))) as MES_FMT
Veja a app em anexo
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 ?
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;
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á
.......
.....
....
....