Re: use Date values in ExpressionFactory.exp

Andrea Biasillo <[email protected]>
Newsgroups gmane.comp.java.cayenne.user
Message-ID <pony-eb26d4b97ed24d27e0f8f8afa0aa2a0ef7145fb7-55f34f28d3f52a4f43f820814389737e5e0caab0@user.cayenne.apache.org>
Hi Mike!

I have tried with:

Expression expDate = ExpressionFactory.exp("modifiedDate> TO_DATE('2003-07-17','yyyy-mm-dd')");

but I get this exception:

Caused by: org.apache.cayenne.exp.ExpressionException: [v.4.2.M1 Nov 26 2020 09:20:26] Encountered " "(" "( "" at line 1, column 22.
Was expecting one of:
    <EOF> 
    "or" ...
    "and" ...
    "|" ...
    "^" ...
    "&" ...
    "<<" ...
    ">>" ...
    "+" ...
    "-" ...
    "/" ...
    "*" ...

and I really would want to have all my expression in one string, without use greaterExp.
Like this:

Expression exp = ExpressionFactory.exp("businessPartnerName='andrea' and businessPartnerCode!='rossi' or ((businessPartnerCode!='bianchi' and maxAdvancePaymentPercent>9) or businessPartnerCode!='pippo' or (maxAdvancePaymentPercent>100 or maxAdvancePaymentPercent<10)) and modifiedDate> TO_DATE('2003-07-17','yyyy-mm-dd')");

But maybe it is not possible.

Andrea

On 2021/01/02 12:45:49, Mike Kienenberger <[email protected]> wrote: 
> Oracle expects SQL like the following to compare dates.
> 
>        MODIFIED_DATE > TO_DATE('2003-07-17','yyyy-mm-dd')
> 
> You either need to use that in your exp() method, or use greaterExp(),
> which can automatically generate the needed sql for the current database.
> 
>         Date date = new GregorianCalendar(2003, Calendar.JULY,
> 17).getTime() ;
>         Expression matchDateGreaterThanDate1 =
> ExpressionFactory.greaterExp("MODIFIED_DATE", date);
> 
> 
> 
> 
> On Sat, Jan 2, 2021 at 3:45 AM Andrea Biasillo <[email protected]> wrote:
> 
> > Hi!
> >
> > Is it possible to use Date values in ExpressionFactory.exp?
> >
> > This works very well:
> >
> > Expression exp = ExpressionFactory.exp("businessPartnerName='andrea' and
> > businessPartnerCode!='rossi' or ((businessPartnerCode!='bianchi' and
> > maxAdvancePaymentPercent>9) or businessPartnerCode!='pippo' or
> > (maxAdvancePaymentPercent>100 or maxAdvancePaymentPercent<10))");
> >
> > but if I use a Date value like this:
> >
> > Expression expDate = ExpressionFactory.exp("modifiedDate> '2003-07-17'");
> >
> > The database, Oracle in my case, will complain:
> >
> > Literal does not match format string
> > (the database expects something like this:  MODIFIED_DATE > DATE
> > '2003-07-17')
> >
> > Any input?
> >
> > Andrea
> >
> >
> >
> >
> >
> >
>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.