Delphi sql using coalesce

Asked

Viewed 266 times

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 field Date for Varchar. Try how to test do coalesce(DT_CAMPANHA,'01.01.2000') for example, there will still be a date...

  • UF_CAMPANHA = coalesce(null, UF_CAMPANHA) -> in this case the expression can return "null" and thus the operator should be "is null" and not "="

  • @Ricardoalvevalho believe that is not the problem because in the last sql I step UF_CAMPANHA = coalesce(null, UF_CAMPANHA), sql is bringing records.

No answers

Browser other questions tagged

You are not signed in. Login or sign up in order to post.