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

Как да прехвърля json масив към текстов масив?

опитайте json_array_elements_text вместо json_array_elements , и нямате нужда от изрично прехвърляне към текст (x::text ), така че можете да използвате:

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;

За вашия допълнителен въпрос

Защо x::text не е прехвърляне?

Това се предава и поради това не дава никаква грешка, но когато се предава json низ към текст като този:::text , postgres добавя кавички към стойността.

Само за тестови цели, нека променим функцията си отново на оригинална (както е във вашия въпрос) и опитайте:

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

Както виждате, (json_array_castext('["hello","world"]'))[1] дава "hello" вместо hello . и затова получихте false когато сравнявате тези стойности.



  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

  2. Може ли INSERT [...] ON CONFLICT да се използва за нарушения на външния ключ?

  3. Postgresql -bash:psql:командата не е намерена

  4. SQLAlchemy, Psycopg2 и Postgresql COPY

  5. Задействане на Postgres след вмъкване при достъп до НОВО