# SQL - PostgreSQL - Simulate IIF From SQL Server *Source: https://wiki.postgresql.org/wiki/Simulating_iif_function* Some developers are accustomed to some 'Access' (and others db's) functions. One of them is the `iif` function that works very simple and sometimes add to the query more intelligence. Well, you will surprising to know that in [[PostgreSQL]] is possible and is quite simple to add this function. In plain [[SQL]]: ```SQL CREATE OR REPLACE FUNCTION iif_sql(boolean, anyelement, anyelement) returns anyelement as $body$ select case $1 when true then $2 else $3 end $body$ LANGUAGE sql IMMUTABLE; ``` while you can cover all data types at once with this [[polymorphic function]], the type needs to be defined or specified using casts. A simple `iif_sql(8<9,'yes','no')` will fail. To solve this, you could add an overloaded method to cover this specific case: ```SQL CREATE OR REPLACE FUNCTION iif_sql(boolean, unknown, unknown) returns text as $body$ select case $1 when true then textin(unknownout($2)) else textin(unknownout($3)) end $body$ LANGUAGE sql IMMUTABLE; ``` In [[PLPGSQL|PL/Pgsql]]: ```SQL CREATE OR REPLACE FUNCTION iif_(boolean, double precision, double precision) RETURNS double precision AS $body$ DECLARE rtVal double precision; BEGIN rtVal := (select case $1 when true then $2 else $3 end); return rtVal; END; $body$ LANGUAGE 'plpgsql' IMMUTABLE CALLED ON NULL INPUT SECURITY INVOKER; ``` *** ## Appendix: Links - [[2-Areas/Code/_README|Code]] - [[SQL]] - [[Databases]] - [[PostgreSQL]] - [[PLPGSQL]] - [[Development]] *Backlinks:* ```dataview list from [[SQL - Simulate `IIF` in PostgreSQL]] AND -"Changelog" ```