PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Postgresql próbuje użyć formatu wykonania w funkcji, ale otrzymuje błąd nie znaleziono kolumny podczas podawania formatu ciągu w koalescencji

Może to zrobić to, czego szukasz:

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;
  • Wyrażenie where to_date(Date, "YYYY-MM-DD")==%I',_t); jest wstecz na wiele sposobów.

    • Pojedyncze cudzysłowy dla wartości :'YYYY-MM-DD' .
    • Operatorem jest = , a nie == .
    • Wygląda na to, że naprawdę chcesz t.Date = to_date(_t, 'YYYY-MM-DD')
    • A gdy _t jest w standardowej formie ISO 'RRRR-MM-DD', zamiast tego po prostu rzutuje:t.Date = _t::date .
  • Nazwy kolumn wyjściowych są widoczne w treści funkcji. Kolumna kwalifikacyjna tabeli o tej samej nazwie. Jeszcze lepiej, na początek unikaj takich konfliktów nazw! Zobacz:

  • Nie ma potrzeby dynamicznego SQL z EXECUTE . Przekazywanie wartości danych działa dobrze ze zwykłym SQL.

  • Nie ma potrzeby korzystania z plpgsql. Proste zapytanie nie wymaga żadnej funkcji proceduralnej. LANGUAGE sql wykonuje zadanie - jeśli w ogóle potrzebujesz funkcji, zwykły SQL wydaje się odpowiedni do tego zadania.

Na marginesie:nie używaj podstawowych nazw typów, takich jak „data”, jako identyfikatora. Trzymaj się legalnych identyfikatorów pisanych małymi literami. Powiązane:




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL, Npgsql zwraca 42601:błąd składni przy lub w pobliżu $1

  2. Przegląd narzędzi do planowania zadań dla PostgreSQL

  3. Jak usunąć wszystkie tabele z bazy danych PostgreSQL?

  4. Grupowanie według daty, z 0, gdy count() nie daje żadnych wierszy

  5. Usuń funkcjonalność za pomocą ramki danych Spark sql