Re: Needed function IF(expr, expr, expr)

From: Franco Bruno Borghesi <franco(at)akyasociados(dot)com(dot)ar>
To: newsy(at)lewczuk(dot)com
Cc: pgsql-general(at)postgresql(dot)org
Subject: Re: Needed function IF(expr, expr, expr)
Date: 2003-09-06 17:19:37
Message-ID: 1062868777.926.4.camel@taz.oficina
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general pgsql-hackers

I've had this function for a long time in my db... try it, I think it
does what you need. And be carefull, it assumes that false or null are
the same thing.

CREATE OR REPLACE FUNCTION IF (BOOLEAN, TEXT, TEXT) RETURNS TEXT AS '
DECLARE
condition ALIAS FOR $1;
iftrue ALIAS FOR $2;
iffalse ALIAS FOR $3;
result TEXT;
BEGIN
IF ($1) THEN
result=iftrue;
ELSE
result:=iffalse;
END IF;

RETURN result;
END;' LANGUAGE 'plpgsql';

On Sat, 2003-09-06 at 10:55, Marek Lewczuk wrote:

> Hello,
> I'm moving out from MySQL to PostgreSQL and there are some function
> which are not supported in PG so I'm trying to write my own functions.
> Currently I have big problem with function IF(), below the description
> of this function from MySQL manual.
>
> Anybody can help me with this ?? I think that PLPGSQL language can be
> used or maybe other (plPerl) etc.
>
>
> -------------------
> IF(expr1,expr2,expr3)
> If expr1 is TRUE (expr1 <> 0 and expr1 <> NULL) then IF() returns expr2,
> else it returns expr3. IF() returns a numeric or string value, depending
> on the context in which it is used:
> mysql> SELECT IF(1>2,2,3);
> -> 3
> mysql> SELECT IF(1<2,'yes','no');
> -> 'yes'
> mysql> SELECT IF(STRCMP('test','test1'),'no','yes');
> -> 'no'
>
> If expr2 or expr3 is explicitely NULL then the result type of the IF()
> function is the type of the not NULL column. (This behaviour is new in
> MySQL 4.0.3). expr1 is evaluated as an integer value, which means that
> if you are testing floating-point or string values, you should do so
> using a comparison operation:
> mysql> SELECT IF(0.1,1,0);
> -> 0
> mysql> SELECT IF(0.1<>0,1,0);
> -> 1
>
> In the first case above, IF(0.1) returns 0 because 0.1 is converted to
> an integer value, resulting in a test of IF(0). This may not be what you
> expect. In the second case, the comparison tests the original
> floating-point value to see whether it is non-zero. The result of the
> comparison is used as an integer. The default return type of IF() (which
> may matter when it is stored into a temporary table) is calculated in
> MySQL Version 3.23 as follows: Expression Return value
> expr2 or expr3 returns string string
> expr2 or expr3 returns a floating-point value floating-point
> expr2 or expr3 returns an integer integer
>
> If expr2 and expr3 are strings, then the result is case-insensitive if
> both strings are case-insensitive. (Starting from 3.23.51)
>
>
>
>
> ---------------------------(end of broadcast)---------------------------
> TIP 7: don't forget to increase your free space map settings
>

In response to

Browse pgsql-general by date

  From Date Subject
Next Message elein 2003-09-06 18:22:08 Re: Needed function IF(expr, expr, expr)
Previous Message Franco Bruno Borghesi 2003-09-06 17:11:07 Re: C functions

Browse pgsql-hackers by date

  From Date Subject
Next Message elein 2003-09-06 18:22:08 Re: Needed function IF(expr, expr, expr)
Previous Message Marek Lewczuk 2003-09-06 17:09:08 Re: Needed function IF(expr, expr, expr)