sql >> Database >  >> RDS >> PostgreSQL

Gemengde int- en numerieke argumenten gebruiken in een Postgres 9.1+-functie

De polymorfe typen zijn op dit moment streng - in andere gevallen probeert PostgreSQL constanten naar het meest voorkomende type te casten, maar deze stap ontbreekt voor polymorfe typen - dus in dit geval, wanneer u het probleem hebt beschreven, moet u expliciet casten of u mogen geen polymorfe typen gebruiken. Plan B is voorbij overbelasting van functies .

CREATE OR REPLACE FUNCTION public.icase1(cond1 boolean,
                                         res1 integer, conddefault integer)
RETURNS integer AS $$
SELECT CASE WHEN $1 THEN $2 ELSE $3 END;
$$ LANGUAGE sql;

CREATE OR REPLACE FUNCTION public.icase1(cond1 boolean,
                                         res1 numeric, conddefault numeric)
RETURNS numeric AS $$
SELECT CASE WHEN $1 THEN $2 ELSE $3 END;
$$ LANGUAGE sql;

Dan werkt je code zoals verwacht:

postgres=> select icase1(true, 1.0, 0);
 icase1 
--------
    1.0
(1 row)

postgres=> select icase1(true, 1.0, 1.0);
 icase1 
--------
    1.0
(1 row)

postgres=> select icase1(true, 1, 0);
 icase1 
--------
      1
(1 row)



  1. Laad een afbeelding naar C# en voeg deze vervolgens in de MySQL-tabel in

  2. Mysql TIME converteren van 24 uur naar AM/PM-formaat

  3. Django ORM-query GROUP BY meerdere kolommen gecombineerd door MAX

  4. Hoe array of meerdere waarden in één kolom op te slaan