PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Postgresql се опитва да използва формат за изпълнение във функция, но получава грешка в колоната, която не е намерена, когато дава формат на низ в обединяване

Това може да направи това, което търсите:

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;
  • Изразът where to_date(Date, "YYYY-MM-DD")==%I',_t); е назад по много начини.

    • Единични кавички за стойности :'YYYY-MM-DD' .
    • Операторът е = , а не == .
    • Изглежда, че наистина искате t.Date = to_date(_t, 'YYYY-MM-DD')
    • И докато _t е в стандартна ISO форма 'ГГГГ-ММ-ДД', по-скоро просто преобразувайте вместо това:t.Date = _t::date .
  • Имената на изходните колони се виждат в тялото на функцията. Колона за квалифициране на таблица със същото име. Още по-добре, като начало избягвайте подобни конфликти с имена! Вижте:

  • Няма нужда от динамичен SQL с EXECUTE . Предаването на стойност на данни работи добре с обикновен SQL.

  • Няма нужда от plpgsql. Простата заявка не изисква никакви процедурни функции. LANGUAGE sql върши работата - ако изобщо имате нужда от функция, обикновеният SQL изглежда добре за тази работа.

Настрана:не използвайте имена на основни типове като "дата" като идентификатор. Придържайте се към легалните идентификатори с малки букви. Свързани:




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Psycopg2 :Създайте таблица в съхранена процедура Postgres

  2. Postgresql:как да създадете таблица само ако тя все още не съществува?

  3. Добавяне на 'serial' към съществуваща колона в Postgres

  4. Действието на Debezium Heartbeat не се задейства

  5. Създаване на таблица от MySQL към PostgreSQL - набор от знаци и сортиране