Comando SQL com Extract na data
Pessoal Bom dia estou com um problema neste SQL quando uso a Função Extract, este bloco abaixo Funciona Perfeitamente, porém o Próximo já não funciona retorna erro [b:3fcb4900a2]Expression Evaluation Not Suported[/b:3fcb4900a2]
[b:3fcb4900a2]SQL sem erro[/b:3fcb4900a2]
SELECT DEPARTAMENTO.LI_IDDEPTO,
SUM(MOVIMENTOCAIXAITEM.DBL_DEBITO)
FROM DEPARTAMENTO
LEFT JOIN MOVIMENTOCAIXAITEM ON(MOVIMENTOCAIXAITEM.LI_IDDEPTO = DEPARTAMENTO.LI_IDDEPTO)
LEFT JOIN MOVIMENTOCAIXA ON(MOVIMENTOCAIXAITEM.LI_IDMOVIMENTOCAIXA = MOVIMENTOCAIXA.LI_IDMOVIMENTOCAIXA)
WHERE (MOVIMENTOCAIXA.DT_DATAMONTAGEM BETWEEN ´03/01/2005´ AND ´04/15/2005´)
or (DEPARTAMENTO.LI_IDDEPTO NOT IN
(SELECT MOVIMENTOCAIXAITEM.LI_IDDEPTO
FROM MOVIMENTOCAIXAITEM
LEFT JOIN MOVIMENTOCAIXA ON (MOVIMENTOCAIXAITEM.LI_IDMOVIMENTOCAIXA = MOVIMENTOCAIXA.LI_IDMOVIMENTOCAIXA)
WHERE MOVIMENTOCAIXA.DT_DATAMONTAGEM BETWEEN ´03/01/2005´ AND ´04/15/2005´))
GROUP BY DEPARTAMENTO.LI_IDDEPTO
[b:3fcb4900a2]SQL com Erro[/b:3fcb4900a2]
SELECT DEPARTAMENTO.LI_IDDEPTO,
SUM(MOVIMENTOCAIXAITEM.DBL_DEBITO)
FROM DEPARTAMENTO
LEFT JOIN MOVIMENTOCAIXAITEM ON(MOVIMENTOCAIXAITEM.LI_IDDEPTO = DEPARTAMENTO.LI_IDDEPTO)
LEFT JOIN MOVIMENTOCAIXA ON(MOVIMENTOCAIXAITEM.LI_IDMOVIMENTOCAIXA = MOVIMENTOCAIXA.LI_IDMOVIMENTOCAIXA)
WHERE EXTRACT(MONTH from MOVIMENTOCAIXA.DT_DATAMONTAGEM) = 3
and EXTRACT(Year from MOVIMENTOCAIXA.DT_DATAMONTAGEM) = 2005
GROUP BY DEPARTAMENTO.LI_IDDEPTO
Obs.: Este ultimo bloco não tá inteiro pois o erro já retorna na Linha do Extract
[b:3fcb4900a2]SQL sem erro[/b:3fcb4900a2]
SELECT DEPARTAMENTO.LI_IDDEPTO,
SUM(MOVIMENTOCAIXAITEM.DBL_DEBITO)
FROM DEPARTAMENTO
LEFT JOIN MOVIMENTOCAIXAITEM ON(MOVIMENTOCAIXAITEM.LI_IDDEPTO = DEPARTAMENTO.LI_IDDEPTO)
LEFT JOIN MOVIMENTOCAIXA ON(MOVIMENTOCAIXAITEM.LI_IDMOVIMENTOCAIXA = MOVIMENTOCAIXA.LI_IDMOVIMENTOCAIXA)
WHERE (MOVIMENTOCAIXA.DT_DATAMONTAGEM BETWEEN ´03/01/2005´ AND ´04/15/2005´)
or (DEPARTAMENTO.LI_IDDEPTO NOT IN
(SELECT MOVIMENTOCAIXAITEM.LI_IDDEPTO
FROM MOVIMENTOCAIXAITEM
LEFT JOIN MOVIMENTOCAIXA ON (MOVIMENTOCAIXAITEM.LI_IDMOVIMENTOCAIXA = MOVIMENTOCAIXA.LI_IDMOVIMENTOCAIXA)
WHERE MOVIMENTOCAIXA.DT_DATAMONTAGEM BETWEEN ´03/01/2005´ AND ´04/15/2005´))
GROUP BY DEPARTAMENTO.LI_IDDEPTO
[b:3fcb4900a2]SQL com Erro[/b:3fcb4900a2]
SELECT DEPARTAMENTO.LI_IDDEPTO,
SUM(MOVIMENTOCAIXAITEM.DBL_DEBITO)
FROM DEPARTAMENTO
LEFT JOIN MOVIMENTOCAIXAITEM ON(MOVIMENTOCAIXAITEM.LI_IDDEPTO = DEPARTAMENTO.LI_IDDEPTO)
LEFT JOIN MOVIMENTOCAIXA ON(MOVIMENTOCAIXAITEM.LI_IDMOVIMENTOCAIXA = MOVIMENTOCAIXA.LI_IDMOVIMENTOCAIXA)
WHERE EXTRACT(MONTH from MOVIMENTOCAIXA.DT_DATAMONTAGEM) = 3
and EXTRACT(Year from MOVIMENTOCAIXA.DT_DATAMONTAGEM) = 2005
GROUP BY DEPARTAMENTO.LI_IDDEPTO
Obs.: Este ultimo bloco não tá inteiro pois o erro já retorna na Linha do Extract
Ariovaldo
Curtidas 0
Respostas
Emerson Nascimento
11/04/2005
qual o banco de dados utilizado?
GOSTEI 0
Ariovaldo
11/04/2005
Utilizo Firebird 1.5
GOSTEI 0
Emerson Nascimento
11/04/2005
eu creio que não há erros na instrução. de qualquer forma, eu apelidei as tabelas, para que o servidor não se perca por haver duas tabelas sendo referenciadas pelo mesmo nome.
select depto.li_iddepto, sum(mci.dbl_debito) from departamento depto left join movimentocaixaitem mci on (mci.li_iddepto=depto.li_iddepto) left join movimentocaixa mc on (mc.li_idmovimentocaixa=mci.li_idmovimentocaixa) where (mc.dt_datamontagem between :dataini and :datafim) or (depto.li_iddepto not in (select mci2.li_iddepto from movimentocaixaitem mci2 left join movimentocaixa mc2 on (mc2.li_idmovimentocaixa=mci2.li_idmovimentocaixa) where mc2.dt_datamontagem between :dataini and :datafim) ) group by departamento.li_iddepto
GOSTEI 0
Ariovaldo
11/04/2005
Emerson eu não posso usar o Between porque eu não passo data nenhuma para o SQL ele simplesmente pega a Data do servidor e extrai o mes e o ano, por isso que uso o Extract
GOSTEI 0
Aminhoni
11/04/2005
Vc nao pode usar o comando DatePart neste caso?? Pelos menos no SqlServer 2000 eu o uso sem problemas, nao sei se ele esta disponivel para o bd que vc esta usando.
GOSTEI 0
Emerson Nascimento
11/04/2005
eu coloquei o parâmetro só para ilustrar. no caso de pegar a data do servidor, faça algo como:
select depto.li_iddepto, sum(mci.dbl_debito) from departamento depto left join movimentocaixaitem mci on (mci.li_iddepto=depto.li_iddepto) left join movimentocaixa mc on (mc.li_idmovimentocaixa=mci.li_idmovimentocaixa) where (extract(month from mc.dt_datamontagem)=extract(month from current_timestamp) and extract(year from mc.dt_datamontagem)=extract(year from current_timestamp)) or (depto.li_iddepto not in (select mci2.li_iddepto from movimentocaixaitem mci2 left join movimentocaixa mc2 on (mc2.li_idmovimentocaixa=mci2.li_idmovimentocaixa) where extract(month from mc2.dt_datamontagem)=extract(month from current_timestamp) and extract(year from mc2.dt_datamontagem)=extract(year from current_timestamp)) ) group by departamento.li_iddepto
GOSTEI 0