2
In Delphi I have Tibquery:
select * from TB_PRECO
where
coalesce(DT_CAMPANHA,'') = coalesce(:DT_CAMPANHA,coalesce(DT_CAMPANHA,'')) and
coalesce(DT_VECTOPRECO,'') >= coalesce(:DT_ATUAL, coalesce(DT_VECTOPRECO,'')) and
DESC_GRUPO = coalesce(:DESC_GRUPO, DESC_GRUPO) and
TP_CAMPANHA = :TP_CAMPANHA and
UF_CAMPANHA = coalesce(:UF_CAMPANHA, UF_CAMPANHA) and
DESC_PRODUTO LIKE coalesce(:DESC_PRODUTO, DESC_PRODUTO) and
COD_PRODUTO = coalesce(:COD_PRODUTO, COD_PRODUTO)
order by DESC_PRODUTO
step the following parameters:
IBQCons_Preco.ParamByName('COD_PRODUTO').Value := Unassigned;
IBQCons_Preco.ParamByName('DESC_PRODUTO').Value := '%%';
IBQCons_Preco.ParamByName('DESC_GRUPO').Value := 'INSETICIDAS';
IBQCons_Preco.ParamByName('DT_ATUAL').Value := StrToDate('23/03/2018');
IBQCons_Preco.ParamByName('TP_CAMPANHA').Value := 'REAIS';
IBQCons_Preco.ParamByName('DT_CAMPANHA').Value := StrToDate('18/05/2018');
IBQCons_Preco.ParamByName('UF_CAMPANHA').Value := Unassigned;
When running the program works. But this when I try to run in Ibexpert:
select * from TB_PRECO
where
coalesce(DT_CAMPANHA,'') = coalesce('18.05.2018',coalesce(DT_CAMPANHA,'')) and
coalesce(DT_VECTOPRECO,'') >= coalesce('23.03.2018', coalesce(DT_VECTOPRECO,'')) and
DESC_GRUPO = coalesce('INSETICIDAS', DESC_GRUPO) and
TP_CAMPANHA = 'REAIS' and
UF_CAMPANHA = coalesce(null, UF_CAMPANHA) and
DESC_PRODUTO LIKE coalesce('%%', DESC_PRODUTO) and
COD_PRODUTO = coalesce(null, COD_PRODUTO)
order by DESC_PRODUTO
sql does not return me even a record. Now if I do so:
select * from TB_PRECO
where
DT_CAMPANHA = '18.05.2018' and
DT_VECTOPRECO >= '23.03.2018' and
DESC_GRUPO = 'INSETICIDAS' and
TP_CAMPANHA = 'REAIS' and
UF_CAMPANHA = coalesce(null, UF_CAMPANHA) and
DESC_PRODUTO LIKE '%%'
and COD_PRODUTO = coalesce(null, COD_PRODUTO)
order by DESC_PRODUTO
SQL returns me the same record as the first Tibquery SQL. Someone’s been through something like this.
Solution: In sql use CAST(), example: Cast('18.05.2018' as Date).
Toothpick, in the
coalesce(DT_CAMPANHA,'')
you change a fieldDate
forVarchar
. Try how to test docoalesce(DT_CAMPANHA,'01.01.2000')
for example, there will still be a date...– Andrey
UF_CAMPANHA = coalesce(null, UF_CAMPANHA) -> in this case the expression can return "null" and thus the operator should be "is null" and not "="
– Ricardo Alves Carvalho
@Ricardoalvevalho believe that is not the problem because in the last sql I step UF_CAMPANHA = coalesce(null, UF_CAMPANHA), sql is bringing records.
– Tiago Casanova