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

Postgresql se pokouší použít formát spuštění ve funkci, ale při zadávání formátu řetězce při sloučení dostává chybu sloupec nenalezen

Toto může dělat to, co hledáte:

CREATE OR REPLACE FUNCTION foo(_t text)
  RETURNS TABLE (Stage_ID bigint, Date varchar) AS
$func$
   SELECT t.Stage_ID, t.Date
   FROM   tbl t
   WHERE  t.Date = _t::date;
$func$  LANGUAGE sql;
  • Výraz where to_date(Date, "YYYY-MM-DD")==%I',_t); je několika způsoby zpět.

    • Jednoduché uvozovky pro hodnoty :'YYYY-MM-DD' .
    • Operátor je = , nikoli == .
    • Zdá se, že opravdu chcete t.Date = to_date(_t, 'YYYY-MM-DD')
    • A zatímco _t je ve standardním formátu ISO 'YYYY-MM-DD', raději místo toho přeneste:t.Date = _t::date .
  • Názvy výstupních sloupců jsou viditelné uvnitř těla funkce. Sloupec kvalifikující tabulku se stejným názvem. Ještě lépe, vyhněte se konfliktům v pojmenování pro začátek! Viz:

  • Není potřeba dynamické SQL s EXECUTE . Předávání datové hodnoty funguje stejně jako u prostého SQL.

  • Není potřeba plpgsql. Jednoduchý dotaz nevyžaduje žádnou procedurální funkčnost. LANGUAGE sql odvede svou práci – pokud vůbec nějakou funkci potřebujete, obyčejné SQL by se pro tuto úlohu zdálo v pořádku.

Stranou:nepoužívejte základní názvy typů jako „datum“ jako identifikátor. Držte se legálních identifikátorů s malými písmeny. Související:




  1. Chyba:PLS-00428:V tomto příkazu select se očekává klauzule into

  2. Při použití šablony JdbcTemplate je nutné escapovat jednu uvozovku

  3. Automatické zvýšení primárního klíče PostgreSQL 9.1

  4. Jak se připojím k serveru SQL pomocí sqlalchemy pomocí ověřování systému Windows?