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

Bagaimana cara melemparkan array json ke array teks?

coba json_array_elements_text alih-alih json_array_elements , dan Anda tidak perlu casting eksplisit ke teks (x::text ), sehingga Anda dapat menggunakan:

CREATE or replace FUNCTION json_array_castext(json) RETURNS text[] AS $f$
    SELECT array_agg(x) FROM json_array_elements_text($1) t(x);
$f$ LANGUAGE sql IMMUTABLE;

Untuk pertanyaan tambahan Anda

Mengapa x::text bukan pemeran?

Ini dilemparkan dan karena ini, itu tidak memberikan kesalahan apa pun, tetapi ketika mentransmisikan string json ke teks seperti ini:::text , postgres menambahkan tanda kutip ke nilai.

Hanya untuk tujuan pengujian, mari ubah fungsi Anda ke yang asli lagi (seperti dalam pertanyaan Anda) dan coba:

SELECT  
(json_array_castext('["hello","world"]'))[1] = 'hello',
(json_array_castext('["hello","world"]'))[1],
'hello'

Seperti yang Anda lihat, (json_array_castext('["hello","world"]'))[1] memberikan "hello" bukannya hello . dan inilah mengapa Anda mendapatkan false saat membandingkan nilai tersebut.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tidak dapat menggunakan tabel bernama pengguna di postgresql hibernate

  2. Batas kinerja solusi replikasi logis

  3. Oracle ke PostgreSQL:MULAI DENGAN/HUBUNGKAN OLEH

  4. Kesalahan soket Postgresql pada OSX 10.7.3 saat menjalankan syncdb . Django

  5. PostgreSQL:Tipe Data mana yang harus digunakan untuk Mata Uang?