sql >> Databáze >  >> RDS >> PostgreSQL

Jak používat smíšené int a numerické argumenty ve funkci Postgres 9.1+

Polymorfní typy jsou v tuto chvíli striktní - v jiných případech se PostgreSQL pokouší přetypovat konstanty na nejběžnější typ, ale tento krok chybí u polymorfních typů - takže v tomto případě, když jste popsali problém, musíte přetypovat explicitně nebo by neměly používat polymorfní typy. Plán B je příliš přetížení funkcí .

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;

Pak bude váš kód fungovat podle očekávání:

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. Proč je trvání pro opakující se událost v Androidu NULL?

  2. Jak mohu namapovat datum Java na DATETIME v mysql (ve výchozím nastavení je to TIMESTAMP) s poznámkami Hibernate

  3. Vytvoření uložené procedury v MySQL5 pomocí <CFQUERY>-Tag ColdFusion 9

  4. Jak mohu ručně vložit soubor .png nebo .jpeg do sloupce bytea v PostgreSQL?