Re: using SQL to evaluate arbitrary expressions? - Mailing list pgsql-sql

From Tom Lane
Subject Re: using SQL to evaluate arbitrary expressions?
Date
Msg-id 6997.1001999261@sss.pgh.pa.us
Whole thread Raw
In response to using SQL to evaluate arbitrary expressions?  (Markus Wagner <wagner@imsd.uni-mainz.de>)
List pgsql-sql
Markus Wagner <wagner@imsd.uni-mainz.de> writes:
> We are glad to have found out that we can evaluate such expressions 
> simply by calling them with SELECT, e. g. "SELECT 29 - 2 > 18" returns true. 
> We think that it would be very nice to benefit from the pg database system 
> parser. But can we rely on this functionality in the future? Is this
> standard SQL?

Well, it's not standard SQL: SQL92 requires a FROM clause in SELECT.
But I can assure you it won't disappear from Postgres; it's too darn
useful.

The customary workaround, as seen in systems like Oracle, is to have
a dummy table containing exactly one row; Oracle calls the dummy table
DUAL.  (Anyone know why?  Seems like SINGLE would be more sensical...)
Then you can do
SELECT 29 - 2 > 18 FROM dual;

The fact that your expression doesn't actually *use* any values from
the one table row doesn't bother the system; you get one evaluation
of the expression, you're happy, and so is the SQL standard.

My advice is to just write "SELECT 29 - 2 > 18", because it's clearer
in intent, simpler, and some tiny fraction faster than specifying
a useless table reference.  But you can take comfort in the fact that
there's a simple workaround if you're ever forced to use a DBMS that
won't accept this syntax.
        regards, tom lane


pgsql-sql by date:

Previous
From: Markus Wagner
Date:
Subject: using SQL to evaluate arbitrary expressions?
Next
From: Joel Mc Graw
Date:
Subject: 7.0.3 and 7.1.3 different results?