GARANTIR DESCONTO

Fórum Comando SQL com Extract na data #276728

11/04/2005

0

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


Ariovaldo

Ariovaldo

Responder

Posts

12/04/2005

Emerson Nascimento

qual o banco de dados utilizado?


Responder

Gostei + 0

12/04/2005

Ariovaldo

Utilizo Firebird 1.5


Responder

Gostei + 0

12/04/2005

Emerson Nascimento

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



Responder

Gostei + 0

12/04/2005

Ariovaldo

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


Responder

Gostei + 0

12/04/2005

Aminhoni

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.


Responder

Gostei + 0

12/04/2005

Emerson Nascimento

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



Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar