PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Postgresql mencoba menggunakan format eksekusi dalam suatu fungsi tetapi mendapatkan kolom tidak ditemukan kesalahan saat memberikan format string dalam penggabungan

Ini mungkin melakukan apa yang Anda cari:

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;
  • Ekspresi where to_date(Date, "YYYY-MM-DD")==%I',_t); mundur dalam berbagai cara.

    • Kutipan tunggal untuk nilai :'YYYY-MM-DD' .
    • Operatornya adalah = , bukan == .
    • Sepertinya Anda sangat menginginkan t.Date = to_date(_t, 'YYYY-MM-DD')
    • Dan sementara _t dalam bentuk ISO standar 'YYYY-MM-DD', alih-alih hanya dilemparkan:t.Date = _t::date .
  • Nama kolom keluaran terlihat di dalam badan fungsi. Kolom kualifikasi tabel dengan nama yang sama. Lebih baik lagi, hindari konflik penamaan seperti itu sejak awal! Lihat:

  • Tidak perlu SQL dinamis dengan EXECUTE . Melewati nilai data berfungsi dengan baik dengan SQL biasa.

  • Tidak perlu plpgsql. Kueri sederhana tidak memerlukan fungsionalitas prosedural apa pun. LANGUAGE sql melakukan pekerjaan - jika Anda membutuhkan fungsi sama sekali, SQL biasa akan tampak baik-baik saja untuk pekerjaan itu.

Selain:jangan gunakan nama tipe dasar seperti "tanggal" sebagai pengenal. Tetap berpegang pada pengidentifikasi huruf kecil yang legal. Terkait:




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Menyiapkan Django dengan Dukungan GeoDjango di AWS Beanstalk atau Instans EC2

  2. Didistribusikan oleh beberapa kolom

  3. Cara menggunakan banyak operator LIKE dan menggunakan indeks

  4. hibernate tidak bisa mendapatkan nilai urutan berikutnya

  5. Perbarui setiap baris dengan datetime acak antara dua tanggal